import { type Filter, type OptionalFilter } from '../filter'; import { type PageNumber, type Page } from '../page'; import { type IterateFn, type IteratePageFn } from '../iterate'; /** * Represents a page number with a filter. */ export interface FilteredPage extends Page, OptionalFilter { } /** * An object that has a Page and a Filter. */ export interface PageAndFilter extends OptionalFilter { page: Page; } /** * Callbacks for iterating over paged results. Provide either `use` (per-item) or `usePage` (per-page). */ export interface FilteredPageIterateFn { /** * Uses each value one-by-one. */ use?: IterateFn; /** * Uses the entire page of results at once. */ usePage?: IteratePageFn; } /** * Creates a {@link FilteredPage} combining a page number with an optional filter copied from the request. * * @param page - The page number * @param request - Optional filter to copy into the result * @returns A new filtered page object */ export declare function filteredPage(page: PageNumber, request?: Filter): FilteredPage; /** * Sequentially loads and iterates through pages of results until an empty page is returned. * * Starts from the given page and increments the page number after each load. Stops when * `loadFn` returns an empty array. Either `iterFn.use` or `iterFn.usePage` must be provided. * * @param inputPage - Starting page with optional filter * @param loadFn - Async function that loads a page of results * @param iterFn - Callbacks for processing each item or page * @returns The total number of items processed across all pages * @throws Error if neither `use` nor `usePage` is specified in `iterFn` */ export declare function iterateFilteredPages(inputPage: FilteredPage, loadFn: (page: FilteredPage) => Promise, iterFn: FilteredPageIterateFn): Promise;