turtle-express
Version:
`turtle-express` is kinda a framework or a library based on `express.js` with an opinionated express router with type safety and schema validation with zod. Also many [more features](https://github.com/mm-ninja-turtles/turtle-express/discussions/7) planni
75 lines • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPagination = exports.paginationSchema = void 0;
const zod_1 = require("zod");
exports.paginationSchema = zod_1.z.object({
firstPage: zod_1.z.number(),
totalPages: zod_1.z.number(),
currentPage: zod_1.z.number(),
previousPage: zod_1.z.number(),
nextPage: zod_1.z.number(),
currentOffset: zod_1.z.number(),
previousOffset: zod_1.z.number(),
nextOffset: zod_1.z.number(),
lastOffset: zod_1.z.number(),
firstOffset: zod_1.z.number(),
});
function getPagination({ page, limit, totalCount, }) {
// calculate total pages
const totalPages = Math.ceil(totalCount / limit);
// calculate current page
let currentPage = page;
// ensure current page isn't out of range
if (currentPage < 1)
currentPage = 1;
else if (currentPage > totalPages)
currentPage = totalPages;
// calculate previous page
let previousPage = currentPage - 1;
if (previousPage < 1)
previousPage = 1;
// calculate next page
let nextPage = currentPage + 1;
if (nextPage > totalPages)
nextPage = totalPages;
// calculate current offset
let currentOffset = (currentPage - 1) * limit;
// ensure current offset isn't out of range
if (currentOffset < 0)
currentOffset = 0;
else if (currentOffset > totalCount)
currentOffset = totalCount - 1;
// calculate previous offset
let previousOffset = (previousPage - 1) * limit;
if (previousOffset < 0)
previousOffset = 0;
else if (previousOffset > totalCount)
previousOffset = totalCount - 1;
// calculate next offset
let nextOffset = (nextPage - 1) * limit;
if (nextOffset < 0)
nextOffset = 0;
else if (nextOffset > totalCount)
nextOffset = totalCount - 1;
// calculate last offset
let lastOffset = (totalPages - 1) * limit;
if (lastOffset < 0)
lastOffset = 0;
else if (lastOffset > totalCount)
lastOffset = totalCount - 1;
// return pagination object
return {
firstPage: 1,
totalPages,
currentPage,
previousPage,
nextPage,
currentOffset,
previousOffset,
nextOffset,
lastOffset,
firstOffset: 0,
};
}
exports.getPagination = getPagination;
//# sourceMappingURL=get-pagination.js.map