import type EventStore from "../EventStore"; import type IRepository from "../../Domain/Repository/IRepository"; import type EventSourcedAggregateRoot from "../../Domain/EventSourcedAggregateRoot"; import { Identity } from "../../Domain/AggregateRoot"; export type RetryCallback = (aggregate: T) => void | Promise; export default abstract class Repository implements IRepository { protected readonly eventStore: EventStore; constructor(eventStore: EventStore); save(aggregateRoot: T): Promise; load(aggregateRootId: Identity): Promise; saveWithRetry(aggregateRootId: Identity, updateFn: RetryCallback, maxRetries?: number): Promise; }