import type { Writable } from 'node:stream';
import type { RecordBatch } from '@apache-arrow/esnext-esm';
import { Schema } from '@apache-arrow/esnext-esm';
import type { Column } from './column.js';
import type { ClientMeta } from './meta.js';
import type { Resource } from './resource.js';
import type { Nullable } from './types.js';
export type TableResolver = (clientMeta: ClientMeta, parent: Nullable<Resource>, stream: Writable) => Promise<void>;
export type RowResolver = (clientMeta: ClientMeta, resource: Resource) => Promise<void>;
export type Multiplexer = (clientMeta: ClientMeta) => ClientMeta[];
export type Transform = (table: Table) => void;
export type Table = {
    name: string;
    title: string;
    description: string;
    columns: Column[];
    relations: Table[];
    transform: Transform;
    resolver: TableResolver;
    multiplexer: Multiplexer;
    postResourceResolver: RowResolver;
    preResourceResolver: RowResolver;
    isIncremental: boolean;
    ignoreInTests: boolean;
    parent: Nullable<Table>;
    pkConstraintName: string;
};
export declare const createTable: ({ name, title, description, columns, relations, transform, resolver, multiplexer, postResourceResolver, preResourceResolver, isIncremental, ignoreInTests, parent, pkConstraintName, }?: Partial<Table>) => Table;
export declare const getTablesNames: (tables: Table[]) => string[];
export declare const getTopLevelTableByName: (tables: Table[], name: string) => Table | undefined;
export declare const getTableByName: (tables: Table[], name: string) => Table | undefined;
export declare const getPrimaryKeys: (table: Table) => string[];
export declare const flattenTables: (tables: Table[]) => Table[];
export declare const getAllParents: (table: Table) => Table[];
export declare const filterTables: (tables: Table[], include: string[], skip: string[], skipDependantTables: boolean) => Table[];
export declare const toArrowSchema: (table: Table) => Schema;
export declare const fromArrowSchema: (schema: Schema) => Table;
export declare const encodeTable: (table: Table) => Uint8Array;
export declare const encodeTables: (tables: Table[]) => Uint8Array[];
export declare const decodeTable: (bytes: Uint8Array) => Table;
export declare const decodeRecord: (bytes: Uint8Array) => [string, RecordBatch<any>[]];
