UNPKG

@conpago/mongo-cursor-pagination

Version:

Make it easy to return cursor-paginated results from a Mongo collection

80 lines 2.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const mongoose_1 = require("mongoose"); const underscore_1 = require("underscore"); const find_1 = __importDefault(require("./find")); const search_1 = __importDefault(require("./search")); const findMulti_1 = __importDefault(require("./findMulti")); /** * Mongoose plugin * @param {Schema} schema mongoose schema. * @param {Options} options */ exports.default = (schema, options) => { /** * paginate function * @param {QueryParams} params required parameter */ const findFn = async function (params) { if (!this.collection) { throw new Error("collection property not found"); } params = (0, underscore_1.extend)({}, params); if (params.query) { const model = this.collection.conn.models[this.collection.modelName]; params.query = new mongoose_1.Query().cast(model, params.query); } return (0, find_1.default)(this.collection, params); }; const findMultiFn = async function (params) { if (!this.collection) { throw new Error("collection property not found"); } params = (0, underscore_1.extend)({}, params); if (params.query) { const model = this.collection.conn.models[this.collection.modelName]; if (params.aggregationSearch) { //@ts-ignore params.query = new mongoose_1.Aggregate().append(params.query)._pipeline; } else { params.query = new mongoose_1.Query().cast(model, params.query); } } return (0, findMulti_1.default)(this.collection, params); }; /** * search function * @param {String} searchString String to search on. Required parameter * @param {SearchParams} params */ const searchFn = async function (searchString, params) { if (!this.collection) { throw new Error("collection property not found"); } params = (0, underscore_1.extend)({}, params); return (0, search_1.default)(this.collection, searchString, params); }; if (options && options.name) { schema.statics[options.name] = findFn; } else { schema.statics.paginate = findFn; } if (options && options.searchFnName) { schema.statics[options.searchFnName] = searchFn; } else { schema.statics.search = searchFn; } if (options && options.findMultiFnName) { schema.statics[options.findMultiFnName] = findMultiFn; } else { schema.statics.paginateMulti = findMultiFn; } }; //# sourceMappingURL=mongoose.plugin.js.map