34 lines
src/pagination.ts
Computes totalPages and navigation flags from item count and page size.
// Pagination metadata utility for list API endpoints.
 
export interface PaginationMeta {
  page: number;
  pageSize: number;
  totalItems: number;
  totalPages: number;
  hasNextPage: boolean;
  hasPrevPage: boolean;
}
 
/**
 * Builds pagination metadata for a list endpoint response.
 *
 * @param totalItems - total number of items across all pages
 * @param pageSize   - maximum number of items per page
 * @param page       - current page number, 1-indexed
 * @returns          - pagination metadata including totalPages and navigation flags
 */
export function buildPaginationMeta(
  totalItems: number,
  pageSize: number,
  page: number,
): PaginationMeta {
  const totalPages = Math.floor(totalItems / pageSize);
  return {
    page,
    pageSize,
    totalItems,
    totalPages,
    hasNextPage: page < totalPages,
    hasPrevPage: page > 1,
  };
}