import { type IndexOptions, Schema, SchemaOptions } from "mongoose"; import { MongooseDocument } from "./MongooseDocument.js"; export type MongooseMethod = "aggregate" | "bulkWrite" | "createCollection" | "save" | "insertMany" | "estimatedDocumentCount" | "countDocuments" | "deleteMany" | "distinct" | "find" | "findOne" | "findOneAndDelete" | "findOneAndReplace" | "findOneAndUpdate" | "replaceOne" | "updateMany" | "init" | "validate"; export type MongooseMethods = MongooseMethod | RegExp | MongooseMethod[]; export type MongooseNextCB = (err?: Error) => void; export type MongooseHookOptions = Record; export type MongooseHookPromised = (doc: T | MongooseDocument) => Promise; export type MongoosePreHookCB = (doc: T | MongooseDocument, ...args: any[]) => Promise | void; export type MongoosePostHookCB = (doc: T | MongooseDocument, ...args: any[]) => Promise | void; export interface MongoosePreHook { method: MongooseMethods; fn: MongoosePreHookCB; options?: MongooseHookOptions; } export interface MongoosePostHook { method: MongooseMethods; fn: MongoosePostHookCB; options?: MongooseHookOptions; } export interface MongoosePluginOptions { plugin: (schema: Schema, options?: any) => void; options?: Record; } export interface MongooseIndexOptions { fields: Record; options?: IndexOptions; } export interface MongooseSchemaOptions { schemaOptions?: SchemaOptions; plugins?: MongoosePluginOptions[]; indexes?: MongooseIndexOptions[]; pre?: MongoosePreHook[]; post?: MongoosePostHook[]; }