import type { IAccessPattern as IEntityAccessPattern } from '../../../entity/actions/accessPattern/index.js';
import type { Entity } from '../../../entity/index.js';
import type { IAccessPattern as ITableAccessPattern } from '../../../table/actions/accessPattern/index.js';
import type { Table } from '../../../table/index.js';
import { TableAction } from '../../../table/index.js';
export declare class Registry<TABLE extends Table = Table, ENTITIES extends Entity[] = Entity[], ACCESS_PATTERNS extends Record<string, ITableAccessPattern | IEntityAccessPattern> = Record<string, ITableAccessPattern | IEntityAccessPattern>> extends TableAction<TABLE, ENTITIES> {
    static actionName: "registry";
    readonly entities: RegistryEntities<ENTITIES>;
    readonly accessPatterns: ACCESS_PATTERNS;
    readonly query: RegistryQueries<ACCESS_PATTERNS>;
    constructor(table: TABLE, _entities?: ENTITIES, accessPatterns?: ACCESS_PATTERNS, { entities, query }?: {
        entities?: RegistryEntities<ENTITIES>;
        query?: RegistryQueries<ACCESS_PATTERNS>;
    });
    registerEntities<NEXT_ENTITIES extends Entity[]>(...nextEntities: NEXT_ENTITIES): Registry<TABLE, NEXT_ENTITIES>;
    registerAccessPatterns<NEXT_ACCESS_PATTERNS extends Record<string, ITableAccessPattern | IEntityAccessPattern>>(nextAccessPatterns: NEXT_ACCESS_PATTERNS): Registry<TABLE, ENTITIES, NEXT_ACCESS_PATTERNS>;
    build<ACTION extends TableAction<TABLE, ENTITIES> = TableAction<TABLE, ENTITIES>>(Action: new (table: TABLE, entities?: ENTITIES) => ACTION): ACTION;
}
type RegistryQueries<ACCESS_PATTERNS extends Record<string, ITableAccessPattern | IEntityAccessPattern>> = {
    [KEY in keyof ACCESS_PATTERNS]: ACCESS_PATTERNS[KEY]['query'];
};
type RegistryEntities<ENTITIES extends Entity[]> = {
    [ENTITY in ENTITIES[number] as ENTITY['entityName']]: ENTITY;
};
export {};
