import type { Mongoose } from "../../packages"; import type { NSchemeService } from "../services"; import type { Nullable, UnknownObject } from "../utils"; export interface IMongoTunnel { setModels(models: NMongoTunnel.SchemaInfo[]): void; getRepository(): NMongoTunnel.Repository; } export namespace NMongoTunnel { export type Create = ( model: string, docs: Mongoose.Docs, options: Mongoose.SaveOptions ) => Promise>; export type InsertMany = ( model: string, docs: Mongoose.Docs, options?: Mongoose.InsertManyOptions ) => Promise; export type Aggregate = ( model: string, pipeline?: Mongoose.PipelineStage[], options?: Mongoose.AggregateOptions ) => Promise>; export type Hydrate = ( model: string, obj: UnknownObject, projection?: Mongoose.AnyObject, options?: Mongoose.HydrateOptions ) => Promise>; export type Populate = ( model: string, docs: Array>, options: Mongoose.PopulateOptions | Array | string ) => Promise>; export type Validate = ( name: string, optional: unknown, pathsToValidate: Mongoose.PathsToValidate ) => Promise; export type CountDocuments = ( model: string, filter?: Mongoose.FilterQuery, options?: Mongoose.QueryOptions ) => Promise>; export type Exists = ( model: string, filter: Mongoose.FilterQuery ) => Promise>; export type Find = ( model: string, filter: Mongoose.FilterQuery, projection?: Nullable>, options?: Nullable> ) => Mongoose.FindResult; export type FindById = < TRawDocType, ResultDoc = Mongoose.THydratedDocumentType >( model: string, id: string, projection?: Mongoose.ProjectionType, options?: Mongoose.QueryOptions ) => Promise>; export type FindByIdAndUpdate = < TRawDocType, ResultDoc = Mongoose.THydratedDocumentType >( model: string, id: string, update: Mongoose.UpdateQuery, options: Mongoose.QueryOptions & { rawResult?: true } ) => Promise>; export type FindByIdAndDelete = < TRawDocType, ResultDoc = Mongoose.THydratedDocumentType >( model: string, id: string, options?: Mongoose.QueryOptions ) => Promise>; export type FindOne = < TRawDocType, ResultDoc = Mongoose.THydratedDocumentType >( model: string, filter?: Mongoose.FilterQuery, projection?: Mongoose.ProjectionType, options?: Mongoose.QueryOptions ) => Promise>; export type Repository

= { create: Create

; insertMany: InsertMany

; aggregate: Aggregate

; hydrate: Hydrate

; populate: Populate

; validate: Validate

; countDocuments: CountDocuments

; exists: Exists

; find: Find

; findById: FindById

; findByIdAndUpdate: FindByIdAndUpdate

; findByIdAndDelete: FindByIdAndDelete

; findOne: FindOne

; findOneAndUpdate: IMongoTunnel["findOneAndUpdate"]; findOneAndReplace: IMongoTunnel["findOneAndReplace"]; findOneAndDelete: IMongoTunnel["findOneAndDelete"]; updateOne: IMongoTunnel["updateOne"]; updateMany: IMongoTunnel["updateMany"]; replaceOne: IMongoTunnel["replaceOne"]; deleteOne: IMongoTunnel["deleteOne"]; deleteMany: IMongoTunnel["deleteMany"]; }; export type Schema = { definition: Mongoose.SchemaDefinition; options?: Mongoose.SchemaOptions; }; export type SchemaInfo = { model: string; getSchema: SchemaFn; }; export type SchemaFn = (agents: NSchemeService.Agents) => Schema; }