generatePaginateFunction() — astro Function Reference
Architecture documentation for the generatePaginateFunction() function in paginate.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD 0d54d570_dd0a_6e46_45ab_7452db08790f["generatePaginateFunction()"] f9b241f0_1a09_8ec8_0d08_713d9b433a71["paginate.ts"] 0d54d570_dd0a_6e46_45ab_7452db08790f -->|defined in| f9b241f0_1a09_8ec8_0d08_713d9b433a71 73cddf52_8aeb_3fa6_3361_83a4fd875695["addRouteBase()"] 0d54d570_dd0a_6e46_45ab_7452db08790f -->|calls| 73cddf52_8aeb_3fa6_3361_83a4fd875695 style 0d54d570_dd0a_6e46_45ab_7452db08790f fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/astro/src/core/render/paginate.ts lines 14–99
export function generatePaginateFunction(
routeMatch: RouteData,
base: AstroConfig['base'],
trailingSlash: AstroConfig['trailingSlash'],
): (...args: Parameters<PaginateFunction>) => ReturnType<PaginateFunction> {
return function paginateUtility(
data: readonly any[],
args: PaginateOptions<Props, Params> = {},
): ReturnType<PaginateFunction> {
const generate = getRouteGenerator(routeMatch.segments, trailingSlash);
let { pageSize: _pageSize, params: _params, props: _props } = args;
const pageSize = _pageSize || 10;
const paramName = 'page';
const additionalParams = _params || {};
const additionalProps = _props || {};
let includesFirstPageNumber: boolean;
if (routeMatch.params.includes(`...${paramName}`)) {
includesFirstPageNumber = false;
} else if (routeMatch.params.includes(`${paramName}`)) {
includesFirstPageNumber = true;
} else {
throw new AstroError({
...AstroErrorData.PageNumberParamNotFound,
message: AstroErrorData.PageNumberParamNotFound.message(paramName),
});
}
const lastPage = Math.max(1, Math.ceil(data.length / pageSize));
const result = [...Array(lastPage).keys()].map((num) => {
const pageNum = num + 1;
const start = pageSize === Infinity ? 0 : (pageNum - 1) * pageSize; // currentPage is 1-indexed
const end = Math.min(start + pageSize, data.length);
const params = {
...additionalParams,
[paramName]: includesFirstPageNumber || pageNum > 1 ? String(pageNum) : undefined,
};
const current = addRouteBase(generate({ ...params }), base);
const next =
pageNum === lastPage
? undefined
: addRouteBase(generate({ ...params, page: String(pageNum + 1) }), base);
const prev =
pageNum === 1
? undefined
: addRouteBase(
generate({
...params,
page:
!includesFirstPageNumber && pageNum - 1 === 1 ? undefined : String(pageNum - 1),
}),
base,
);
const first =
pageNum === 1
? undefined
: addRouteBase(
generate({
...params,
page: includesFirstPageNumber ? '1' : undefined,
}),
base,
);
const last =
pageNum === lastPage
? undefined
: addRouteBase(generate({ ...params, page: String(lastPage) }), base);
return {
params,
props: {
...additionalProps,
page: {
data: data.slice(start, end),
start,
end: end - 1,
size: pageSize,
total: data.length,
currentPage: pageNum,
lastPage: lastPage,
url: { current, next, prev, first, last },
} as Page,
},
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does generatePaginateFunction() do?
generatePaginateFunction() is a function in the astro codebase, defined in packages/astro/src/core/render/paginate.ts.
Where is generatePaginateFunction() defined?
generatePaginateFunction() is defined in packages/astro/src/core/render/paginate.ts at line 14.
What does generatePaginateFunction() call?
generatePaginateFunction() calls 1 function(s): addRouteBase.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free