import * as mongoose from "mongoose";
declare type NonEmptyArray<T> = T[] & {
    0: T;
};
export declare type MongooseCriteria = mongoose.FilterQuery<any> | mongoose.Query<any, any>;
export declare type MongooseModel = mongoose.Model<any, any>;
export declare type MongooseCallback = (err: any, res: any[]) => void;
export declare type Attributes = Record<string, any> | Record<string, any>[];
export declare type FieldObject = {
    name: string;
    minSize?: number;
    weight?: number;
    prefixOnly?: boolean;
    escapeSpecialCharacters?: boolean;
    keys?: NonEmptyArray<string>;
};
export declare type KeyFieldObject = FieldObject & {
    keys: NonEmptyArray<string>;
};
export declare type FieldIndexes = {
    indexes: Record<string, string>;
    weights: Record<string, number>;
};
export declare type NgramOptions = {
    text: string;
    escapeSpecialCharacters: boolean;
    minSize: number;
    prefixOnly: boolean;
};
export declare type Fields = Array<string | FieldObject>;
export declare type PluginSchemaOptions = {
    fields: Fields;
    options?: {
        toJSON?: mongoose.SchemaOptions["toJSON"];
        toObject?: mongoose.SchemaOptions["toObject"];
    };
};
export declare type QueryObject = {
    query: string;
    minSize?: number;
    prefixOnly?: boolean;
    exact?: boolean;
};
export declare type Query = string | QueryObject;
export declare type FullySearch = {
    query: Query;
    criteria?: MongooseCriteria;
};
export declare type SearchableModel = Pick<MongooseModel, "find">;
export declare type StaticFuzzyParameters = [Query] | [Query, MongooseCriteria] | [Query, MongooseCallback] | [Query, MongooseCriteria, MongooseCallback];
export declare type QueryFuzzyParameters = [Query] | [Query, MongooseCriteria];
export declare type QueryFuzzyReturn = {
    query: Query;
    options: MongooseCriteria;
};
export declare type StaticFuzzyReturn = QueryFuzzyReturn & {
    callback?: MongooseCallback;
};
export declare type FuzzyParameters = StaticFuzzyParameters | QueryFuzzyParameters;
export interface MongooseQueryHelpers<T extends mongoose.Document> {
    fuzzySearch(...args: StaticFuzzyParameters): mongoose.Query<T, any>;
}
export interface MongoosePluginModel<T extends mongoose.Document> extends mongoose.Model<T, MongooseQueryHelpers<T>> {
    fuzzySearch(...args: StaticFuzzyParameters): mongoose.QueryWithHelpers<Array<T>, any>;
}
export {};
