import { s } from "bknd/utils";
import { type WhereQuery } from "../../data/entities/query/WhereBuilder";
declare const sortSchema: s.ObjectSchema<{
    readonly by: s.StringSchema<s.IStringOptions> & s.IStringOptions;
    readonly dir: {
        readonly enum: ["asc", "desc"];
    } & s.Schema<s.ISchemaOptions, "asc" | "desc" | undefined, "asc" | "desc" | undefined>;
}, s.Merge<s.IObjectOptions & {
    additionalProperties: false;
}>>;
type SortSchema = s.Static<typeof sortSchema>;
export type RepoWithSchema = Record<string, Omit<RepoQueryIn, "with"> & {
    with?: unknown;
}>;
export declare const repoQuery: s.ObjectSchema<{
    readonly limit: s.Schema<s.ISchemaOptions, number | undefined, number | undefined>;
    readonly offset: s.Schema<s.ISchemaOptions, number | undefined, number | undefined>;
    readonly sort: s.Schema<s.ISchemaOptions, string | {
        dir?: "asc" | "desc" | undefined;
        by: string;
    } | undefined, {
        dir?: "asc" | "desc" | undefined;
        by: string;
    } | undefined>;
    readonly where: s.Schema<s.ISchemaOptions, string | {
        [x: string]: unknown;
    } | undefined, WhereQuery | undefined>;
    readonly select: s.Schema<s.ISchemaOptions, string | string[] | undefined, string[] | undefined>;
    readonly join: s.Schema<s.ISchemaOptions, string | string[] | undefined, string[] | undefined>;
    readonly with: s.Schema<{}, RepoWithSchema | undefined, RepoWithSchema | undefined>;
}, s.IObjectOptions>;
export declare const getRepoQueryTemplate: () => Required<RepoQuery>;
export type RepoQueryIn = {
    limit?: number;
    offset?: number;
    sort?: string | {
        by: string;
        dir: "asc" | "desc";
    };
    select?: string[];
    with?: string | string[] | Record<string, RepoQueryIn>;
    join?: string[];
    where?: WhereQuery;
};
export type RepoQuery = s.StaticCoerced<typeof repoQuery> & {
    sort: SortSchema;
};
export {};
