@typegoose/typegoose
Version:
Define Mongoose models using TypeScript classes
186 lines (185 loc) • 20.7 kB
TypeScript
import type { Aggregate, AggregateExtract, CallbackError, Document, MongooseQueryOrDocumentMiddleware, ErrorHandlingMiddlewareFunction, HydratedDocument, Model, MongooseDocumentMiddleware, MongooseQueryMiddleware, PostMiddlewareFunction, PreMiddlewareFunction, PreSaveMiddlewareFunction, Query, SchemaPostOptions, SchemaPreOptions, MongooseDistinctDocumentMiddleware, MongooseDefaultQueryMiddleware, MongooseDistinctQueryMiddleware, MongooseQueryAndDocumentMiddleware, InsertManyOptions } from 'mongoose';
import type { AnyParamConstructor, DocumentType, ReturnModelType } from './types';
/** Type copied from mongoose, because it is not exported but used in hooks */
type QueryResultType<T> = T extends Query<infer ResultType, any> ? ResultType : never;
export declare const pre: {
<S extends never, T = S>(method: "save", fn: PreSaveMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: boolean;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: boolean;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: boolean;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryAndDocumentMiddleware | MongooseQueryAndDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: "save", fn: PreSaveMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends unknown, RawDocType = unknown>(method: "init", fn: (this: S, doc: RawDocType) => void): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryAndDocumentMiddleware | MongooseQueryAndDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: false;
}): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDefaultQueryMiddleware | MongooseDefaultQueryMiddleware[], fn: PreMiddlewareFunction<T>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: (this: T, next: (err?: CallbackError) => void, docs: any | Array<any>, options?: InsertManyOptions & {
lean?: boolean;
}) => void | Promise<void>, options?: SchemaPreOptions): ClassDecorator;
};
export declare const post: {
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: ErrorHandlingMiddlewareFunction<T, Array<any>>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: false;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: boolean;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: true;
query: false;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: "init", fn: PostMiddlewareFunction<T, T>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDefaultQueryMiddleware | MongooseDefaultQueryMiddleware[], fn: PostMiddlewareFunction<T, QueryResultType<T>>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PostMiddlewareFunction<T, QueryResultType<T>>, options?: SchemaPostOptions): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, QueryResultType<T>>, options?: SchemaPostOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options?: SchemaPostOptions & {
document: true;
query: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: PostMiddlewareFunction<T, Array<AggregateExtract<T>>>, options?: SchemaPostOptions): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions): ClassDecorator;
};
export declare const Pre: {
<S extends never, T = S>(method: "save", fn: PreSaveMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: boolean;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: boolean;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: boolean;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryAndDocumentMiddleware | MongooseQueryAndDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: "save", fn: PreSaveMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends unknown, RawDocType = unknown>(method: "init", fn: (this: S, doc: RawDocType) => void): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryAndDocumentMiddleware | MongooseQueryAndDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: false;
}): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDefaultQueryMiddleware | MongooseDefaultQueryMiddleware[], fn: PreMiddlewareFunction<T>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions & {
document: true;
query: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: PreMiddlewareFunction<T>, options?: SchemaPreOptions): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: (this: T, next: (err?: CallbackError) => void, docs: any | Array<any>, options?: InsertManyOptions & {
lean?: boolean;
}) => void | Promise<void>, options?: SchemaPreOptions): ClassDecorator;
};
export declare const Post: {
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryMiddleware | MongooseQueryMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDocumentMiddleware | MongooseDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: ErrorHandlingMiddlewareFunction<T, Array<any>>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options: SchemaPostOptions & {
errorHandler: true;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: false;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: boolean;
query: false;
}): ClassDecorator;
<S extends never, T = S>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseDistinctDocumentMiddleware | MongooseDistinctDocumentMiddleware[], fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions & {
document: true;
query: false;
}): ClassDecorator;
<S extends unknown, T = S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: "init", fn: PostMiddlewareFunction<T, T>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDefaultQueryMiddleware | MongooseDefaultQueryMiddleware[], fn: PostMiddlewareFunction<T, QueryResultType<T>>): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseDistinctQueryMiddleware | MongooseDistinctQueryMiddleware[], fn: PostMiddlewareFunction<T, QueryResultType<T>>, options?: SchemaPostOptions): ClassDecorator;
<S extends object | Query<any, any>, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : Query<DocumentType<S>, DocumentType<S>, {}, unknown, "find", Record<string, never>>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PostMiddlewareFunction<T, QueryResultType<T>>, options?: SchemaPostOptions & {
document: false;
query: true;
}): ClassDecorator;
<S extends unknown, T = S extends Query<any, any, {}, unknown, "find", Record<string, never>> ? S : S extends Document<import("mongoose").Types.ObjectId, any, any, Record<string, any>, {}> ? S : HydratedDocument<DocumentType<S>, any>>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: ErrorHandlingMiddlewareFunction<T>, options?: SchemaPostOptions & {
document: true;
query: true;
}): ClassDecorator;
<T extends Aggregate<any>>(method: "aggregate" | RegExp, fn: PostMiddlewareFunction<T, Array<AggregateExtract<T>>>, options?: SchemaPostOptions): ClassDecorator;
<S extends AnyParamConstructor<any> | Model<any>, T = S extends Model<any, {}, {}, {}, any, any, any> ? S : ReturnModelType<S>>(method: "insertMany" | RegExp, fn: PostMiddlewareFunction<T, T>, options?: SchemaPostOptions): ClassDecorator;
};
export {};