@soerenuhrbach/command-bus
v1.0.1
Published
A lightweight command bus for TypeScript/JavaScript.
Downloads
5
Readme
@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);