export interface PaginatedQuery { fetchPage(page: number): Promise; reset(): void; hasMore(): boolean; } export interface PaginatedQueryConfig { fetcher: (page: number) => Promise<{ items: T[]; hasNextPage: boolean }>; } export function createPaginatedQuery( config: PaginatedQueryConfig, ): PaginatedQuery { let _hasMore = true; return { async fetchPage(page) { const { items, hasNextPage } = await config.fetcher(page); _hasMore = hasNextPage; return items; }, reset() { _hasMore = true; }, hasMore() { return _hasMore; }, }; }