25 lines
651 B
TypeScript
25 lines
651 B
TypeScript
import { PAGINATION_DEFAULT_LIMIT, PAGINATION_MAX_LIMIT } from "../config.ts";
|
|
|
|
/**
|
|
* Parses page/limit query parameters with sensible defaults and bounds.
|
|
* page: clamped to [1, ∞)
|
|
* limit: clamped to [1, 100], defaults to 20
|
|
*/
|
|
export function parsePagination(
|
|
params: URLSearchParams,
|
|
defaultLimit = PAGINATION_DEFAULT_LIMIT,
|
|
): { page: number; limit: number } {
|
|
const page = Math.max(
|
|
1,
|
|
parseInt(params.get("page") ?? "1") || 1,
|
|
);
|
|
const limit = Math.min(
|
|
Math.max(
|
|
1,
|
|
parseInt(params.get("limit") ?? String(defaultLimit)) || defaultLimit,
|
|
),
|
|
PAGINATION_MAX_LIMIT,
|
|
);
|
|
return { page, limit };
|
|
}
|