@soerenuhrbach/command-bus
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

@soerenuhrbach/command-bus

A lightweight command bus for TypeScript/JavaScript.

Installation

Install by npm

npm install --save @soerenuhrbach/command-bus

or install with yarn

yarn add @soerenuhrbach/command-bus

Modify your tsconfig.json to include the following settings

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

Add a polyfill for the Reflect API. You can use:

The Reflect polyfill import should only be added once, and before command bus is used:

// main.ts
import "reflect-metadata";

// Your code here...

Usage

Creating a command

// test-command.ts
import { Command, CommandInterface } from "@soerenuhrbach/command-bus";

@Command()
class TestCommand implements CommandInterface {
}

Creating a command handler

// test-command-handler.ts
import { TestCommand } from './test-command'; 
import { CommandHandler, CommandHandlerInterface } from "@soerenuhrbach/command-bus";

@CommandHandler(TestCommand)
class TestCommandHandler implements CommandHandlerInterface<TestCommand> {
  public handle(command: TestCommand) {}
}

Register command and command handler

With using "@CommandHandler()" decorator

// main.ts
import { CommandBus } from '@soerenuhrbach/command-bus';
import { TestCommandHandler } from './test-command-handler';

const bus = new CommandBus();
bus.registerHandler(TestCommandHandler);

Without using "@CommandHandler()" decorator

// main.ts
import { CommandBus } from '@soerenuhrbach/command-bus';
import { TestCommand } from './test-command';
import { TestCommandHandler } from './test-command-handler';

const bus = new CommandBus();
bus.register(TestCommand, TestCommandHandler);

Dispatching command

// main.ts
import { CommandBus } from '@soerenuhrbach/command-bus';
import { TestCommand } from './test-command';
import { TestCommandHandler } from './test-command-handler';

const bus = new CommandBus();
bus.register(TestCommand, TestCommandHandler);

bus.dispatch(new TestCommand).then(() => console.log('Command dispatched and executed'));

Using command bus with your own di container

By default this package uses the di container provided by the package '@soerenuhrbach/di'. You can use your own di container by passing your container as constructor parameter.

// main.ts
import { CommandBus } from '@soerenuhrbach/command-bus';
import { ContainerInterface } from '@soerenuhrbach/di';

const container: ContainerInterface = new CustomContainer();
const bus = new CommandBus(container);

Readme

Keywords

none

Package Sidebar

Install

npm i @soerenuhrbach/command-bus

Weekly Downloads

3

Version

1.0.1

License

MIT

Unpacked Size

36.1 kB

Total Files

54

Last publish

Collaborators

  • soerenuhrbach