import { type Column, type JsonColumn, type RequiredColumn } from './Column.js'; import type { ForeignKeyConstraint, PrimaryKeyConstraint, UniqueConstraint } from './Constraint.js'; import { Index } from './Index.js'; import { type HasSelection, type HasSql, type HasTable } from './Internal.js'; import { type Sql } from './Sql.js'; import { Field } from './expr/Field.js'; import type { Input } from './expr/Input.js'; import { type JsonExpr } from './expr/Json.js'; export type TableDefinition = { [name: string]: Column; }; declare class TableData { name: string; alias?: string; schemaName?: string; columns: TableDefinition; config?: TableConfig; } export declare class TableApi extends TableData { private brand; get aliased(): string; identifier(altName?: string): Sql; target(): Sql; columnDefinition(name: string): Sql; createDefinition(): Sql; listColumns(): Sql; fields(): Record; createTable(altName?: string, ifNotExists?: boolean): Sql; createIndexes(): Array; create(): Array; drop(): Sql; indexes(): Record; } export type Table, Name extends string = string> = TableFields & HasTable & HasSelection; export type TableFields = { [K in keyof Definition]: Definition[K] extends JsonColumn ? JsonExpr : Definition[K] extends Column ? Field : never; }; export type TableRow = { [K in keyof Definition]: Definition[K] extends Column ? T : never; } & {}; type IsReq = Col extends RequiredColumn ? null extends Value ? true : false : false; type RequiredInput = { readonly [K in keyof D as true extends IsReq ? K : never]: D[K] extends Column ? Input : never; }; type OptionalInput = { readonly [K in keyof D as false extends IsReq ? K : never]?: D[K] extends Column ? Input : never; }; export type TableInsert = RequiredInput & OptionalInput; export type TableUpdate = { readonly [K in keyof Definition]?: Definition[K] extends Column ? Input : never; }; export type TableConfigSetting = UniqueConstraint | PrimaryKeyConstraint | ForeignKeyConstraint | Index; export interface TableConfig extends Record> { } export declare function table(name: Name, columns: Definition, config?: (self: Table) => TableConfig, schemaName?: string): Table; export declare function alias(table: Table, alias: Alias): Table; export declare function tableCreator(nameTable: (name: string) => string): typeof table; export type InsertRow = T extends Table ? TableInsert : never; export type SelectRow = T extends Table ? TableRow : never; export type UpdateRow = T extends Table ? TableUpdate : never; export {};