import { Sifter } from './sifter.ts';
export type Field = {
    field: string;
    weight: number;
};
export type Sort = {
    field: string;
    direction?: string;
};
export type SortFn = (this: Sifter, a: ResultItem, b: ResultItem) => number;
export type UserOptions = {
    fields: string[] | Field[];
    conjunction: string;
    sort: string | SortFn | Sort[];
    nesting?: boolean;
    score?: ScoreFn;
    filter?: boolean;
    sort_empty?: SortFn | Sort[];
    respect_word_boundaries?: boolean;
    limit?: number;
};
export type Options = {
    fields: Field[];
    conjunction: string;
    sort: SortFn | Sort[];
    nesting?: boolean;
    score?: ScoreFn;
    filter?: boolean;
    sort_empty?: SortFn | Sort[];
    respect_word_boundaries?: boolean;
    limit?: number;
};
export type Token = {
    string: string;
    regex: RegExp | null;
    field: string | null;
};
export type Weights = {
    [key: string]: number;
};
export type PrepareObj = {
    options: Options;
    query: string;
    tokens: Token[];
    total: number;
    items: ResultItem[];
    weights: Weights;
    getAttrFn: (data: any, field: string) => any;
};
export type Settings = {
    diacritics: boolean;
};
export type ResultItem = {
    score: number;
    id: number | string;
};
export type ScoreFn = (item: ResultItem) => number;
