/***************************************************************
    Authors : Steven Aray - Sunday, December 12, 2024
    Website : https://stexcore.com
    Lib: indexed-db
    Copyright 2024
***************************************************************/
import { IFieldType } from "./types/field.type";
import { IFieldTypeToValueType } from "./types/field.type.value.type";
import { IStructField } from "./types/struct.field";
import { IStructTable } from "./types/struct.table";
import { ITable } from "./types/table";
/**
 * Make a structure of tables database to manage indexeddb
 * @param struct Structure table
 * @returns Structure table
 */
export declare function createStructTables<T extends {
    [key: string]: IStructTable<{
        [key: string]: IStructField<IFieldType, boolean | undefined, boolean | undefined>;
    }>;
}>(struct: T): T;
/**
 * Database to manage tables based in IndexedDB
 */
export declare class IndexedDB<T extends {
    [key: string]: IStructTable<{
        [key: string]: IStructField<IFieldType, boolean | undefined, boolean | undefined>;
    }>;
}> {
    /**
     * database name
     */
    readonly db_name: string;
    readonly table_structs: T;
    /**
     * Structure of all tables
     */
    readonly structs: {
        [key in keyof T]: {
            /**
             * Name field key with primary key
             */
            primaryKey: keyof T[key];
            /**
             * Fields of table
             */
            fields: T[key];
        };
    };
    /**
     * Promise async getting database
     */
    private gettingDatabase;
    /**
     * Database instance memory
     */
    private db;
    /**
     * Inicialize the structure of database
     * @param database Database name
     * @param table_structs Structure of tables
     */
    constructor(
    /**
     * database name
     */
    db_name: string, table_structs: T);
    /**
     * asynchronously obtains the database
     * @returns Indexed Database
     */
    private GetDataBase;
    /**
     * Get a interface to manage a table of indexedDB
     * @param name Name of table
     * @returns Inteface to manage the table
     */
    getTable<T2 extends (keyof T & string)>(name: T2): Promise<ITable<{
        [key in keyof T[T2]]: (T[T2][key]["allow_null"] extends true ? (IFieldTypeToValueType<T[T2][key]["type"]> | null) : (IFieldTypeToValueType<T[T2][key]["type"]>));
    }, {
        [key in keyof T[T2] as T[T2][key]["autoincrement"] extends true ? never : key]: (T[T2][key]["allow_null"] extends true ? (IFieldTypeToValueType<T[T2][key]["type"]> | null) : (IFieldTypeToValueType<T[T2][key]["type"]>));
    }>>;
}
