import * as Immutable from "immutable"; export declare class Column { } export interface IColumns { [index: string]: Column; } export declare type RowType = T extends IColumns ? { [key in keyof T]: ColumnType; } : never; declare type IndexType = T extends IColumns ? { readonly [key in keyof T]: Immutable.Map, Immutable.Set>; } : never; declare type ColumnType = T extends Column ? K : never; declare type QueryType = T extends IColumns ? { [key in keyof T]?: ColumnType; } : never; export declare class Table { indices: IndexType; readonly rows: Immutable.Map>; readonly nextId: number; static create(columns: T): Table; static makeFactory(columns: T): () => Table; private constructor(); selectAll(): Immutable.Seq.Indexed>; selectAllWithRowId(): Immutable.Seq.Keyed>; select(query: QueryType): Immutable.Seq.Indexed>; selectWithRowId(query: QueryType): Immutable.Seq.Keyed>; delete(query: QueryType): Table; update(query: QueryType, rowUpdate: Partial>): Table; reduce(values: Iterable, reducer: (value: V, table: Table) => Table): Table; updateRow(rowId: number, rowUpdate: Partial>): Table; removeRows(rowIds: Iterable): Table; removeRow(rowId: number): Table; addRows(rows: RowType[]): Table; addRow(row: RowType): Table; private selectRows; } export {};