22import type { Aggregate } from '~/aggregate' ;
33import type { EventDetail } from '~/event/eventDetail' ;
44import type { EventType , EventTypeDetails } from '~/event/eventType' ;
5- import type { GroupedEvent } from '~/event/groupedEvent' ;
5+ import { GroupedEvent } from '~/event/groupedEvent' ;
66import type { EventStorageAdapter } from '~/eventStorageAdapter' ;
77import type { $Contravariant } from '~/utils' ;
88
@@ -41,15 +41,29 @@ export class EventStore<
4141> {
4242 static pushEventGroup : EventGroupPusher = async <
4343 GROUPED_EVENTS extends [ GroupedEvent , ...GroupedEvent [ ] ] ,
44+ OPTIONS_OR_GROUPED_EVENTS_HEAD extends
45+ | GroupedEvent
46+ | { force ?: boolean } = GroupedEvent ,
4447 > (
45- ...groupedEvents : GROUPED_EVENTS
48+ optionsOrGroupedEvent : OPTIONS_OR_GROUPED_EVENTS_HEAD ,
49+ ..._groupedEvents : GROUPED_EVENTS
4650 ) => {
47- const [ groupedEventsHead , ...groupedEventsTail ] = groupedEvents ;
51+ const groupedEvents = (
52+ optionsOrGroupedEvent instanceof GroupedEvent
53+ ? [ optionsOrGroupedEvent , ..._groupedEvents ]
54+ : _groupedEvents
55+ ) as [ GroupedEvent , ...GroupedEvent [ ] ] ;
56+
57+ const options = (
58+ optionsOrGroupedEvent instanceof GroupedEvent ? { } : optionsOrGroupedEvent
59+ ) as { force ?: boolean } ;
60+
61+ const [ groupedEventsHead ] = groupedEvents ;
4862
4963 const { eventGroup : eventGroupWithoutAggregates } =
5064 await groupedEventsHead . eventStorageAdapter . pushEventGroup (
51- groupedEventsHead ,
52- ...groupedEventsTail ,
65+ options ,
66+ ...groupedEvents ,
5367 ) ;
5468
5569 const eventGroupWithAggregates = eventGroupWithoutAggregates . map (
@@ -68,7 +82,7 @@ export class EventStore<
6882
6983 return { event, ...( nextAggregate ? { nextAggregate } : { } ) } ;
7084 } ,
71- ) as EventGroupPusherResponse < GROUPED_EVENTS > ;
85+ ) ;
7286
7387 await Promise . all (
7488 groupedEvents . map ( ( groupedEvent , eventIndex ) => {
@@ -82,7 +96,13 @@ export class EventStore<
8296 } ) ,
8397 ) ;
8498
85- return { eventGroup : eventGroupWithAggregates } ;
99+ return { eventGroup : eventGroupWithAggregates } as {
100+ eventGroup : OPTIONS_OR_GROUPED_EVENTS_HEAD extends GroupedEvent
101+ ? EventGroupPusherResponse <
102+ [ OPTIONS_OR_GROUPED_EVENTS_HEAD , ...GROUPED_EVENTS ]
103+ >
104+ : EventGroupPusherResponse < GROUPED_EVENTS > ;
105+ } ;
86106 } ;
87107
88108 _types ?: {
0 commit comments