/// <reference types="node" />
/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
/// <reference types="mongoose/types/inferrawdoctype" />
import mongoose from 'mongoose';
import type { DocumentType, Ref, RefType } from './types';
/**
 * Check if the given document is populated
 * @param doc The Ref with uncertain type
 */
export declare function isDocument<T, S extends RefType>(doc: Ref<T, S> | null | undefined): doc is DocumentType<T>;
/**
 * Check if the given array is fully populated
 * Only returns "true" if all members in the array are populated
 * @param docs The Array of Refs with uncertain type
 */
export declare function isDocumentArray<T, S extends RefType>(docs: mongoose.Types.Array<Ref<T, S>> | null | undefined): docs is mongoose.Types.Array<DocumentType<NonNullable<T>>>;
/**
 * Check if the given array is fully populated
 * Only returns "true" if all members in the array are populated
 * @param docs The Array of Refs with uncertain type
 */
export declare function isDocumentArray<T, S extends RefType>(docs: Ref<T, S>[] | null | undefined): docs is DocumentType<NonNullable<T>>[];
type AllowedRefTypes = typeof String | typeof Number | typeof Buffer | typeof mongoose.Types.ObjectId | typeof mongoose.Types.Buffer;
/**
 * Check if the document is of type "refType"
 * @param doc The Ref with uncretain type
 * @param refType The Expected Reference Type (this is required because this type is only known at compile time, not at runtime)
 */
export declare function isRefType<T, S extends RefType>(doc: Ref<T, S> | null | undefined, refType: AllowedRefTypes): doc is NonNullable<S>;
/**
 * Check if the array is fully of type "refType"
 * Only returns "true" if all members in the array are of type "refType"
 * @param docs The Ref with uncretain type
 * @param refType The Expected Reference Type (this is required because this type is only known at compile time, not at runtime)
 */
export declare function isRefTypeArray<T, S extends RefType>(docs: mongoose.Types.Array<Ref<T, S>> | null | undefined, refType: AllowedRefTypes): docs is mongoose.Types.Array<NonNullable<S>>;
/**
 * Check if the array is fully of type "refType"
 * Only returns "true" if all members in the array are of type "refType"
 * @param docs The Ref with uncretain type
 * @param refType The Expected Reference Type (this is required because this type is only known at compile time, not at runtime)
 */
export declare function isRefTypeArray<T, S extends RefType>(docs: Ref<T, S>[] | null | undefined, refType: AllowedRefTypes): docs is NonNullable<S>[];
/**
 * Check if the input is a mongoose.Model
 * @param model The Value to check
 */
export declare function isModel(model: any): model is mongoose.Model<any>;
export {};