🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
DemoInstallSign in
Socket

ts-command

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-command

ts-command is a very basic command library utilizing Typescript decorators. It also supports reloading commands on the fly.

0.1.2
latest
npm
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

ts-command

ts-command is a very basic command library utilizing Typescript decorators. It also supports reloading commands on the fly.

Getting Started

Note: you have to disable strictFunctionTypes in your tsconfig to be able to use the decorators better.

In your tsconfig set these compiler options:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

In the entry file, import reflect-metadata like this:

import 'reflect-metadata';

Now you should be good to go.

  • Create a CommandManager. This class will manage all the commands and services you register.
import { CommandManager } from 'ts-command';
const manager = new CommandManager();
  • Create a CommandCollection.
import { Command, Restrict, RestrictClass, Injectable } from 'ts-command';
// Set this to enable service injection
@Injectable()
// Restrict all commands in this class.
@RestrictClass((
  // the user (supplied by you)
  user: any,
  // the collection instance
  instance: MyCommandCollection,
) =>
  // check whether the user is valid
  instance.service.isValid(user),
)
class MyCommandCollection {
  // specify the injected services (these get injected for you)
  constructor(private service: AuthService) {}

  // Restrict the command
  @Restrict((user: any) => user.id > 5)
  // Specify the command name ('my-command') and arguments ('name')
  @Command('my-command', 'name')
  // execute the command. The first argument contains the command-arguments, the second the user
  myCommand({ name }: { name: string }, user: any) {
    return `Hello ${name}! -by ${user.name}`;
  }
}
  • Create a Service
import { Service } from 'ts-command';

@Service()
class AuthService {
  isValid(user: any) {
    return !!user.id;
  }
}
  • Register the service and command-collection
import { CommandManager } from 'ts-command';
// the command manager supports chaining
const manager: CommandManager = new CommandManager().registerService(AuthService).load(MyCommandCollection);
  • Run commands

The manager expects a string like this: <command-name> [...args]. So you have to check whether it's a command (e.g. check for a prefix and remove the prefix).

const reply = await manager.onCommand(message, user);

Reloading

Currently, reloading is an opt-in feature. You can enable it by passing either true to the CommandManager or by passing reload-options:

// Enable for all users:
new CommandManager(true);

// Restrict reloading
new CommandManager({
  enabled: true,
  restrict: (user: any) => user.isAdmin,
});

This will add a reload command. The signature is: reload <name: command or service>.

FAQs

Package last updated on 25 Dec 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts