import { RawTable, RawTableType } from './RawTable.js';
import { RowType, Table } from './Table.js';
type SchemaType = Record<string, Table<any>>;
export type SchemaTableType<S extends SchemaType> = {
    [K in keyof S]: RowType<S[K]>;
};
/**
 * A schema is a collection of tables. It is used to define the structure of a database.
 */
export declare class Schema<S extends SchemaType = SchemaType> {
    readonly types: SchemaTableType<S>;
    readonly props: S;
    readonly tables: Table[];
    readonly rawTables: RawTable[];
    constructor(tables: Table[] | S);
    /**
     * Adds raw tables to this schema. Raw tables are identified by their name, but entirely managed by the application
     * developer instead of automatically by PowerSync.
     * Since raw tables are not backed by JSON, running complex queries on them may be more efficient. Further, they allow
     * using client-side table and column constraints.
     * Note that raw tables are only supported when using the new `SyncClientImplementation.rust` sync client.
     *
     * @param tables An object of (table name, raw table definition) entries.
     * @experimental Note that the raw tables API is still experimental and may change in the future.
     */
    withRawTables(tables: Record<string, RawTableType>): void;
    validate(): void;
    toJSON(): {
        tables: {
            name: string;
            view_name: string;
            local_only: boolean;
            insert_only: boolean;
            include_old: any;
            include_old_only_when_changed: boolean;
            include_metadata: boolean;
            ignore_empty_update: boolean;
            columns: {
                name: string;
                type: import("./Column.js").ColumnType | undefined;
            }[];
            indexes: {
                name: string;
                columns: {
                    name: string;
                    ascending: boolean | undefined;
                    type: import("./Column.js").ColumnType;
                }[];
            }[];
        }[];
        raw_tables: RawTable[];
    };
}
export {};
