export function build<Event extends { timestamp: number }, Out, Key extends string | number>(
builder: (events: Event[]) => Out | null | undefined,
) {
return reduce<Key, Event, Out, Keyed<Key, Event>>((events: [Event, number][]) => {
const res = builder(
events
.filter(([_, mult]) => mult === 1)
.map(([ev, _]) => ev)
.toSorted((a, b) => a.timestamp - b.timestamp),
)
if (res) {
return [[res, 1]]
} else {
return []
}
})
}
export function build<Event extends { timestamp: number }, Out, Key extends string | number>(
builder: (events: Event[]) => Out | null | undefined,
) {
return reduce<Key, Event, Out, Keyed<Key, Event>>((events: [Event, number][]) => {
const res = builder(
events
.filter(([_, mult]) => mult === 1)
.map(([ev, _]) => ev)
.toSorted((a, b) => a.timestamp - b.timestamp),
)
if (res) {
return [[res, 1]]
} else {
return []
}
})
}