import { DomainMessage } from 'ts-eventsourcing/Domain/DomainMessage'; import { DomainEvent } from 'ts-eventsourcing/Domain/DomainEvent'; import { Identity } from 'ts-eventsourcing/ValueObject/Identity'; import { DomainEventAction, domainEventActionType, DomainEventMetadata } from './DomainEventAction'; import { EntityName } from '../ValueObject/EntityName'; /** * Create an action from a domain message. */ export function actionForDomainMessage( id: ReadModelId, message: DomainMessage, entity: EntityName, additionalMetadata: { entity?: string, [extraProps: string]: any } = {}, ): DomainEventAction & typeof additionalMetadata> { return { type: domainEventActionType(message.payload, entity), event: message.payload, metadata: { entity, recordedOn: message.recordedOn, readModelId: id, aggregateId: message.aggregateId, ...additionalMetadata, }, }; }