import { z as zod } from 'zod';
import { Clean, Values } from './util';
export declare const ArrayFilterKeys: {
    readonly In: "in";
};
export type ArrayFilterKey = Values<typeof ArrayFilterKeys>;
export declare const ScalarFilterKeys: {
    readonly GreaterThan: "gt";
    readonly LesserThan: "lt";
};
export type ScalarFilterKey = Values<typeof ScalarFilterKeys>;
export type FilterKey = ScalarFilterKey | ArrayFilterKey;
export declare const FilterKeys: {
    readonly In: "in";
} & {
    readonly GreaterThan: "gt";
    readonly LesserThan: "lt";
};
export declare const CombinationKeys: {
    readonly And: "and";
    readonly Or: "or";
    readonly Not: "not";
};
export type CombinationKey = Values<typeof CombinationKeys>;
export declare const Keys: {
    readonly In: "in";
} & {
    readonly GreaterThan: "gt";
    readonly LesserThan: "lt";
} & {
    readonly And: "and";
    readonly Or: "or";
    readonly Not: "not";
};
export type ArrayFilterValue = zod.infer<typeof ArrayFilterValue>;
export declare const ArrayFilterValue: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
export type ScalarFilterValue = zod.infer<typeof ScalarFilterValue>;
export declare const ScalarFilterValue: zod.ZodNumber;
export type FilterValue = zod.infer<typeof FilterValue>;
export declare const FilterValue: zod.ZodUnion<[zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>, zod.ZodNumber]>;
export type FilterTypeMap = {
    [ArrayFilterKeys.In]: InFilter;
    [ScalarFilterKeys.GreaterThan]: GreaterThanFilter;
    [ScalarFilterKeys.LesserThan]: LesserThanFilter;
};
export type InFilterContent = zod.infer<typeof InFilterContent>;
export declare const InFilterContent: zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
}, "strip", zod.ZodTypeAny, {
    value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
    fieldName: string;
}, {
    value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
    fieldName: string;
}>;
export type InFilter = zod.infer<typeof InFilter>;
export declare const InFilter: zod.ZodObject<{
    op: zod.ZodLiteral<"in">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
    }, "strip", zod.ZodTypeAny, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}>;
export type GreaterThanFilterContent = zod.infer<typeof GreaterThanFilterContent>;
export declare const GreaterThanFilterContent: zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodNumber;
}, "strip", zod.ZodTypeAny, {
    value: number;
    fieldName: string;
}, {
    value: number;
    fieldName: string;
}>;
export type GreaterThanFilter = zod.infer<typeof GreaterThanFilter>;
export declare const GreaterThanFilter: zod.ZodObject<{
    op: zod.ZodLiteral<"gt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}>;
export type LesserThanFilterContent = zod.infer<typeof LesserThanFilterContent>;
export declare const LesserThanFilterContent: zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodNumber;
}, "strip", zod.ZodTypeAny, {
    value: number;
    fieldName: string;
}, {
    value: number;
    fieldName: string;
}>;
export type LesserThanFilter = zod.infer<typeof LesserThanFilter>;
export declare const LesserThanFilter: zod.ZodObject<{
    op: zod.ZodLiteral<"lt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}>;
export type ArrayFilter = zod.infer<typeof ArrayFilter>;
export declare const ArrayFilter: zod.ZodObject<{
    op: zod.ZodLiteral<"in">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
    }, "strip", zod.ZodTypeAny, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}>;
export type ScalarFilter = zod.infer<typeof ScalarFilter>;
export declare const ScalarFilter: zod.ZodUnion<[zod.ZodObject<{
    op: zod.ZodLiteral<"gt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"lt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}>]>;
export type FilterContent = zod.infer<typeof FilterContent>;
export declare const FilterContent: zod.ZodUnion<[zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
}, "strip", zod.ZodTypeAny, {
    value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
    fieldName: string;
}, {
    value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
    fieldName: string;
}>, zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodNumber;
}, "strip", zod.ZodTypeAny, {
    value: number;
    fieldName: string;
}, {
    value: number;
    fieldName: string;
}>, zod.ZodObject<{
    fieldName: zod.ZodString;
    value: zod.ZodNumber;
}, "strip", zod.ZodTypeAny, {
    value: number;
    fieldName: string;
}, {
    value: number;
    fieldName: string;
}>]>;
export type FilterOperator = zod.infer<typeof FilterOperator>;
export declare const FilterOperator: zod.ZodDiscriminatedUnion<"op", [zod.ZodObject<{
    op: zod.ZodLiteral<"in">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
    }, "strip", zod.ZodTypeAny, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"gt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"lt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}>]>;
export type CombinationOperator = {
    op: CombinationKey;
    content: (CombinationOperator | FilterOperator)[];
    pivot?: string;
};
export declare const CombinationOperator: zod.ZodType<CombinationOperator>;
export declare const Operator: zod.ZodUnion<[zod.ZodType<CombinationOperator, zod.ZodTypeDef, CombinationOperator>, zod.ZodDiscriminatedUnion<"op", [zod.ZodObject<{
    op: zod.ZodLiteral<"in">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
    }, "strip", zod.ZodTypeAny, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"gt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"lt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}>]>]>;
export type Operator = zod.infer<typeof Operator>;
export declare const SQON: zod.ZodUnion<[zod.ZodType<CombinationOperator, zod.ZodTypeDef, CombinationOperator>, zod.ZodDiscriminatedUnion<"op", [zod.ZodObject<{
    op: zod.ZodLiteral<"in">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodUnion<[zod.ZodArray<zod.ZodUnion<[zod.ZodString, zod.ZodNumber]>, "many">, zod.ZodString, zod.ZodNumber]>;
    }, "strip", zod.ZodTypeAny, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }, {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}, {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"gt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
}>, zod.ZodObject<{
    op: zod.ZodLiteral<"lt">;
    content: zod.ZodObject<{
        fieldName: zod.ZodString;
        value: zod.ZodNumber;
    }, "strip", zod.ZodTypeAny, {
        value: number;
        fieldName: string;
    }, {
        value: number;
        fieldName: string;
    }>;
}, "strip", zod.ZodTypeAny, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}, {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
}>]>]>;
export type SQON = Clean<Operator>;
export declare const isCombination: (operator: Operator) => operator is CombinationOperator;
export declare const isFilter: (operator: Operator) => operator is {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
} | {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
} | {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
};
export declare const isArrayFilter: (operator: Operator) => operator is {
    op: "in";
    content: {
        value: (string | number | (string | number)[]) & (string | number | (string | number)[] | undefined);
        fieldName: string;
    };
};
export declare const isScalarFilter: (operator: Operator) => operator is {
    op: "gt";
    content: {
        value: number;
        fieldName: string;
    };
} | {
    op: "lt";
    content: {
        value: number;
        fieldName: string;
    };
};
export declare const isArrayFilterKey: (input: unknown) => input is "in";
export declare const isScalarFilterKey: (input: unknown) => input is "gt" | "lt";
export declare const isArrayFilterValue: (value: unknown) => value is string | number | (string | number)[];
export declare const isScalarFilterValue: (value: unknown) => value is number;
