First draft on paginator interface:
export type Paginator<
Deserialized extends DeserializedData,
Page,
PageInfo,
> = {
paginate(action: Action, page: Page): Awaitable<void>;
extract(data: Deserialized): Awaitable<PageInfo>;
};
export type PaginationStrategies<Deserialized extends DeserializedData> =
& {
default: Paginator<Deserialized, unknown, unknown>;
[name: string]: Paginator<Deserialized, unknown, unknown>;
}
& { chunk?: Paginator<Deserialized, { offset: number; limit: number; }, {}>; };
export type Paginator<
Deserialized extends DeserializedData = DeserializedData,
Strategies extends PaginatorStrategies<Deserialized> = PaginatorStrategies<Deserialized>,
> = {
strategies: Strategies;
};
First draft on paginator interface: