18 lines
580 B
TypeScript
18 lines
580 B
TypeScript
import { Subject } from "rxjs";
|
|
|
|
import { getCommand } from "./internal";
|
|
import { MessageSender } from "./message.sender";
|
|
import { Message, CommandDefinition } from "./types";
|
|
|
|
export class SubjectMessageSender implements MessageSender {
|
|
constructor(private readonly messagesSubject: Subject<Message<object>>) {}
|
|
|
|
send<T extends object>(
|
|
commandDefinition: string | CommandDefinition<T>,
|
|
payload: object | T = {},
|
|
): void {
|
|
const command = getCommand(commandDefinition);
|
|
this.messagesSubject.next(Object.assign(payload ?? {}, { command: command }));
|
|
}
|
|
}
|