import { Entity } from '../entity/Entity';
import { Action } from '../action/Action';
import { StorageType } from '../storage/StorageType';
import { Permission } from '../permission/Permission';
import { ViewEntity } from '../entity/ViewEntity';
export declare type SchemaSetup = {
    entities?: Entity[] | null;
    defaultStorageType?: StorageType;
    actions?: Action[];
    defaultActionPermissions?: Permission;
    permissionsMap?: PermissionsMap;
};
declare type EntityPermission = {
    [key: string]: any;
};
declare type PermissionsMap = {
    entities: EntityPermission;
};
export declare type EntityMap = {
    [entityName: string]: Entity | ViewEntity;
};
declare type ActionMap = {
    [actionName: string]: Action;
};
export declare class Schema {
    private _entityMap;
    private _actionMap;
    private _isValidated;
    private _userEntity;
    defaultStorageType: StorageType;
    permissionsMap: PermissionsMap | null;
    defaultActionPermissions: any;
    constructor(setup?: SchemaSetup);
    addEntity(entity: any): void;
    getUserEntity(throwIfMissing: any): any;
    _lazyLoadMissingEntities(): void;
    validate(): void;
    getEntities(): EntityMap;
    addAction(action: Action): void;
    getActions(): ActionMap;
}
export declare const isSchema: (obj: unknown) => obj is Schema;
export {};
