nestjs-paginate-mongo
Version:
<p align="center"> <a href="https://www.npmjs.com/package/nestjs-paginate-mongo"><img src="https://img.shields.io/npm/dm/nestjs-paginate-mongo.svg" alt="Total Downloads"></a> <a href="https://www.npmjs.com/package/nestjs-paginate-mongo"><img src="http
36 lines (35 loc) • 1.64 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.paginate = void 0;
const lodash_1 = require("lodash");
const defaultOptions = { perPage: 10, page: 1 };
/**
* Paginate a mongoose query result
* @param query The query you want to paginate
* @param options Pagination options like page number and/or items per page
* @returns Paginated query with metadata
*/
const paginate = (query_1, ...args_1) => __awaiter(void 0, [query_1, ...args_1], void 0, function* (query, options = defaultOptions) {
const _query = (0, lodash_1.clone)(query);
const { perPage = 15, page = 1 } = options;
const total = yield _query.countDocuments().exec();
const lastPage = Math.ceil(total / perPage);
const data = yield query
.limit(perPage)
.skip(perPage * (page - 1))
.exec();
return {
data,
metadata: { total, perPage, page, lastPage },
};
});
exports.paginate = paginate;