import type { QuerySchema } from '../core/index';
import type { SchemaShape } from '../core/schema';
import type { TSelectQueryBuilder } from './types.js';
export type KyselyNodeUnaryOp = '=' | '>' | '>=' | '<' | '<=' | 'like' | 'ilike';
type IdentifierNode = {
    kind: 'IdentifierNode';
    name: string;
};
type ColumnNode = {
    kind: 'ColumnNode';
    column: IdentifierNode;
};
type ReferenceNode = {
    kind: 'ReferenceNode';
    column: ColumnNode;
};
type BinaryOperationNode = {
    kind: 'BinaryOperationNode';
    leftOperand: ReferenceNode;
    operator: OperatorNode;
    rightOperand: ValueNode;
} | {
    kind: 'BinaryOperationNode';
    leftOperand: ReferenceNode;
    operator: {
        kind: 'OperatorNode';
        operator: 'in';
    };
    rightOperand: PrimitiveValueListNode;
};
type OperatorNode = {
    kind: 'OperatorNode';
    operator: KyselyNodeUnaryOp;
};
type ValueNode = {
    kind: 'ValueNode';
    value: any;
};
type PrimitiveValueListNode = {
    kind: 'PrimitiveValueListNode';
    values: any[];
};
type AndNode = {
    kind: 'AndNode';
    left: BinaryOperationNode | AndNode | ParensNode;
    right: BinaryOperationNode;
};
type OrNode = {
    kind: 'OrNode';
    left: BinaryOperationNode;
    right: BinaryOperationNode;
};
type ParensNode = {
    kind: 'ParensNode';
    node: OrNode | AndNode;
};
type RawNode = {
    kind: 'RawNode';
    sqlFragments: string[];
    parameters: any[];
};
type UnaryOperationNode = {
    kind: 'UnaryOperationNode';
    operator: {
        kind: 'OperatorNode';
        operator: 'not';
    };
    operand: BinaryOperationNode;
};
export type OperationNode = ParensNode | OrNode | UnaryOperationNode | BinaryOperationNode | AndNode | ReferenceNode | RawNode;
export declare const fromKysely: <TShape extends SchemaShape, TableName extends string>(queryBuilder: TSelectQueryBuilder<TShape, TableName>) => QuerySchema<TShape>;
export {};
