import { PermissionMap } from '../permission/Permission';
import { StorageType } from '../storage/StorageType';
import { Attribute, AttributesMap, AttributesSetupMap, AttributesMapGenerator } from '../attribute/Attribute';
import { PreFilterMap } from '../filter';
import { Context } from '../context/Context';
import { GraphQLResolveInfo } from 'graphql';
interface ViewEntityPreProcessorResponse {
    args?: {
        [key: string]: unknown;
    };
    context?: Context;
}
export declare type ViewEntityPreProcessor = (params: {
    entity?: ViewEntity;
    source?: any;
    args?: {
        [key: string]: unknown;
    };
    context?: Context;
    info?: GraphQLResolveInfo;
}) => ViewEntityPreProcessorResponse | Promise<ViewEntityPreProcessorResponse>;
export declare type ViewEntityPostProcessor = (params: {
    result?: {
        [key: string]: unknown;
    };
    entity?: ViewEntity;
    source?: any;
    args?: {
        [key: string]: unknown;
    };
    context?: Context;
    info?: GraphQLResolveInfo;
}) => {
    [key: string]: unknown;
};
export interface ViewEntitySetup {
    name: string;
    description: string;
    attributes?: AttributesSetupMap | AttributesMapGenerator;
    storageType?: StorageType;
    viewExpression: any;
    permissions?: PermissionMap;
    preProcessor?: ViewEntityPreProcessor;
    postProcessor?: ViewEntityPostProcessor;
    preFilters?: PreFilterMap | (() => PreFilterMap);
    meta?: any;
}
export declare class ViewEntity {
    name: string;
    storageTableName: string;
    description: string;
    storageType?: StorageType;
    viewExpression: any;
    permissions?: PermissionMap;
    preProcessor?: ViewEntityPreProcessor;
    postProcessor?: ViewEntityPostProcessor;
    preFilters?: PreFilterMap;
    meta?: any;
    private readonly _attributesMap;
    private _primaryAttribute;
    private _permissions;
    private _defaultPermissions;
    private _attributes;
    descriptionPermissionsFind: string | boolean;
    descriptionPermissionsRead: string | boolean;
    private _preFilters;
    isFallbackStorageType: any;
    findOne: (...arg: any[]) => any;
    find: (...args: any[]) => any;
    constructor(setup: ViewEntitySetup);
    _injectStorageTypeBySchema(storageType: StorageType): void;
    _exposeStorageAccess(): void;
    _injectDefaultPermissionsBySchema(defaultPermissions: any): void;
    getAttributes(): AttributesMap;
    _processAttribute(rawAttribute: any, attributeName: any): Attribute;
    _processAttributeMap(): {};
    getPrimaryAttribute(): Attribute;
    referenceAttribute(attributeName: any): import("../attribute/Attribute").AttributeBase;
    _processPermissions(): PermissionMap | null;
    _generatePermissionDescriptions(): void;
    _processPreFilters(preFilters?: PreFilterMap): PreFilterMap;
    getPreFilters(): PreFilterMap;
    getPermissions(): PermissionMap;
    getStorageType(): StorageType;
    toString(): string;
}
export declare const isViewEntity: (obj: unknown) => obj is ViewEntity;
export {};
