import type { DriverSpecs } from './Driver.js'; import { type HasSql, internalData, internalSql } from './Internal.js'; import { type Sql } from './Sql.js'; import type { Field, FieldData } from './expr/Field.js'; import { type Input } from './expr/Input.js'; export interface BaseColumnData { type: HasSql; name?: string; json?: boolean; primary?: boolean; notNull?: boolean; isUnique?: boolean; autoIncrement?: boolean; defaultValue?: Sql; references?(): FieldData; mapFromDriverValue?(value: unknown, specs: DriverSpecs): unknown; mapToDriverValue?(value: unknown): unknown; $default?(): Sql; $onUpdate?(): Sql; } export interface ColumnData extends BaseColumnData { type: ColumnType; } export declare class ColumnType implements HasSql { kind: string; args: Array>; [internalSql]: Sql; constructor(kind: string, args: Array>, sql?: Sql); } type WithoutNull = Exclude; export declare class Column { readonly [internalData]: ColumnData; constructor(data: ColumnData); notNull(): RequiredColumn; $defaultFn(value: () => Input>): Column>; $default(value: Input> | (() => Input>)): Column>; $onUpdateFn(fn: () => Input): Column; $onUpdate(fn: () => Input): Column; default(value: Input>): Column>; defaultNow(): Column>; primaryKey(options?: { autoIncrement: boolean; }): Column>; unique(name?: string): Column; references(foreignField: Field | (() => Field)): Column; $type(): Column; } export declare class JsonColumn extends Column { private brand; constructor(data: ColumnData); } declare const required: unique symbol; export interface RequiredColumn extends Column> { [required]: true; } export interface Columns { (data: ColumnData): Column; [key: string]: (...args: Array>) => ColumnType; } export declare const column: Columns; export type ColumnArguments = [name?: string] | [options: Options] | [name: string, options: Options]; export declare function columnConfig(args: ColumnArguments): { name: string | undefined; options: Options | undefined; }; export declare function formatColumn(column: BaseColumnData): Sql; export {};