mongoose-aggregate-paginate-v2
Version:
A page based custom aggregate pagination library for Mongoose with customizable labels.
91 lines (78 loc) • 3.14 kB
TypeScript
//
// Based on type declarations for mongoose-paginate-v2 1.3.
//
// Thanks to knyuwork <https://github.com/knyuwork>
// and LiRen Tu <https://github.com/tuliren> for their contribution
declare module "mongoose" {
type PrePaginatePipelineStage = PipelineStage | '__PREPAGINATE__';
interface CustomLabels<T = string | undefined | boolean> {
totalDocs?: T | undefined;
docs?: T | undefined;
limit?: T | undefined;
page?: T | undefined;
nextPage?: T | undefined;
prevPage?: T | undefined;
hasNextPage?: T | undefined;
hasPrevPage?: T | undefined;
totalPages?: T | undefined;
pagingCounter?: T | undefined;
meta?: T | undefined;
}
interface PaginateOptions {
sort?: object | string | undefined;
offset?: number | undefined;
page?: number | undefined;
limit?: number | undefined;
customLabels?: CustomLabels | undefined;
/* If pagination is set to `false`, it will return all docs without adding limit condition. (Default: `true`) */
pagination?: boolean | undefined;
allowDiskUse?: boolean | undefined;
countQuery?: object | undefined;
useFacet?: boolean | undefined;
}
interface QueryPopulateOptions {
/** space delimited path(s) to populate */
path: string;
/** optional fields to select */
select?: any;
/** optional query conditions to match */
match?: any;
/** optional model to use for population */
model?: string | Model<any> | undefined;
/** optional query options like sort, limit, etc */
options?: any;
/** deep populate */
populate?: QueryPopulateOptions | QueryPopulateOptions[] | undefined;
}
interface AggregatePaginateResult<T> {
docs: T[];
totalDocs: number;
limit: number;
page?: number | undefined;
totalPages: number;
nextPage?: number | null | undefined;
prevPage?: number | null | undefined;
pagingCounter: number;
hasPrevPage: boolean;
hasNextPage: boolean;
meta?: any;
[customLabel: string]: T[] | number | boolean | null | undefined;
}
interface AggregatePaginateModel<D> extends Model<D> {
aggregatePaginate<T>(
query?: Aggregate<T[]> | PrePaginatePipelineStage[],
options?: PaginateOptions,
callback?: (err: any, result: AggregatePaginateResult<T>) => void,
): Promise<AggregatePaginateResult<T>>;
}
function model(name: string, schema?: Schema, collection?: string, skipInit?: boolean): AggregatePaginateModel<any>;
}
import mongoose = require("mongoose");
declare function mongooseAggregatePaginate(schema: mongoose.Schema): void;
export = mongooseAggregatePaginate;
declare namespace mongooseAggregatePaginate {
const PREPAGINATION_PLACEHOLDER: string;
}
declare namespace _ {
const aggregatePaginate: { options: mongoose.PaginateOptions };
}