@conpago/mongo-cursor-pagination
Version:
Make it easy to return cursor-paginated results from a Mongo collection
80 lines • 2.86 kB
JavaScript
;
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