import * as $Helper from '@ima/helpers';
import { AppEnvironment } from '../boot';
import { InitBindFunction } from '../Bootstrap';
import { Cache } from '../cache/Cache';
import { CacheFactory } from '../cache/CacheFactory';
import { ControllerDecorator } from '../controller/ControllerDecorator';
import { Dictionary } from '../dictionary/Dictionary';
import { Dispatcher } from '../event/Dispatcher';
import { EventBus } from '../event/EventBus';
import { Observable } from '../event/Observable';
import { HttpAgent } from '../http/HttpAgent';
import { HttpProxy } from '../http/HttpProxy';
import { HttpStatusCode } from '../http/HttpStatusCode';
import { UrlTransformer } from '../http/UrlTransformer';
import { MetaManager } from '../meta/MetaManager';
import { ObjectContainer } from '../oc/ObjectContainer';
import { PageHandlerRegistry } from '../page/handler/PageHandlerRegistry';
import { PageManager } from '../page/manager/PageManager';
import { PageFactory } from '../page/PageFactory';
import { ComponentUtils } from '../page/renderer/ComponentUtils';
import { PageRenderer } from '../page/renderer/PageRenderer';
import { PageStateManager } from '../page/state/PageStateManager';
import { PageStateManagerDecorator } from '../page/state/PageStateManagerDecorator';
import { Request } from '../router/Request';
import { CookieTransformFunction, Response } from '../router/Response';
import { RouteFactory } from '../router/RouteFactory';
import { RouteNames } from '../router/RouteNames';
import { Router } from '../router/Router';
import { RouterEvents } from '../router/RouterEvents';
import { CookieStorage } from '../storage/CookieStorage';
import { MapStorage } from '../storage/MapStorage';
import { SessionMapStorage } from '../storage/SessionMapStorage';
import { SessionStorage } from '../storage/SessionStorage';
import { WeakMapStorage } from '../storage/WeakMapStorage';
import { GlobalImaObject, Utils } from '../types';
import { Window } from '../window/Window';
type AddOCPrefixes<T, P extends string> = {
    [K in keyof T as K extends string ? `${P}${K}` : never]: T[K] | null;
};
type AddOCChaining<T> = {
    [K in keyof T as K extends string ? `${K}` | `${K}.${string}` : never]: T[K];
};
type WithOCOptional<T> = AddOCPrefixes<AddOCChaining<T>, '?'>;
type WithOCSpread<T> = AddOCPrefixes<AddOCChaining<T>, '...'>;
type WithOCOptionalSpread<T> = AddOCPrefixes<AddOCChaining<T>, '...?'>;
export type DecoratedOCAliasMap = AddOCChaining<OCAliasMap> & WithOCOptional<OCAliasMap> & WithOCOptionalSpread<OCAliasMap> & WithOCSpread<OCAliasMap>;
/**
 * Map of IMA default string aliases and constants initialized in
 * the ObjectContainer. This is used for typechecking and type
 * hinting of string OC arguments.
 */
export interface OCAliasMap {
    $Helper: typeof $Helper;
    $oc: ObjectContainer;
    $Settings: Parameters<InitBindFunction>['2'] & {
        [key: string]: any;
    };
    $Env: keyof AppEnvironment;
    $Protocol: GlobalImaObject['$Protocol'];
    $Secure: boolean;
    $Request: Request;
    $Response: Response;
    $Window: Window;
    $Error: Dispatcher;
    $Dictionary: Dictionary;
    $CookieTransformFunction: CookieTransformFunction;
    $CookieStorage: CookieStorage;
    $SessionStorage: InstanceType<typeof SessionStorage> | InstanceType<typeof MapStorage>;
    $MapStorage: InstanceType<typeof MapStorage>;
    $WeakMapStorage: WeakMapStorage;
    $SessionMapStorage: InstanceType<typeof SessionMapStorage>;
    $Dispatcher: Dispatcher;
    $EventBus: EventBus;
    $Observable: Observable;
    $CacheStorage: OCAliasMap['$MapStorage'];
    $CacheFactory: InstanceType<typeof CacheFactory>;
    $Cache: Cache;
    $MetaManager: MetaManager;
    $ControllerDecorator: ControllerDecorator;
    $PageStateManagerDecorator: PageStateManagerDecorator;
    $PageStateManager: PageStateManager;
    $PageFactory: PageFactory;
    $ComponentUtils: ComponentUtils;
    $Utils: Utils;
    $PageHandlerRegistry: PageHandlerRegistry;
    $PageManager: PageManager;
    $RouteFactory: RouteFactory;
    $Router: Router;
    $RouteNames: RouteNames;
    $RouterEvents: RouterEvents;
    $HttpUrlTransformer: UrlTransformer;
    $HttpAgentProxy: HttpProxy;
    $Http: HttpAgent;
    $HttpStatusCode: typeof HttpStatusCode;
    $PageRenderer: PageRenderer;
}
export declare const initBind: InitBindFunction;
export {};
//# sourceMappingURL=bind.d.ts.map