import { BrowserInitialStateOption, BrowserInitialStatePage, BrowserModule, BrowserResource, BrowserStructure, ModuleConfig } from '../browser';
import { FoxpageCSRHooks } from '../hook';
export interface RenderOptions extends BrowserInitialStateOption {
    inDesigner?: boolean;
}
export interface CSRLoader {
    addModule(mods: Record<string, ModuleConfig>): void;
    addModule(name: string, opt: ModuleConfig): void;
    addModule(nameOrMods: string | Record<string, ModuleConfig>, opt?: ModuleConfig): void;
    loadModule(list: string[]): Promise<any[]>;
    loadModule<T = any>(name: string, ver?: string): Promise<T>;
    loadModule(nameOrList: string | string[], ver?: string): Promise<any[]>;
}
export type CSRPluginVisitor = {
    [K in keyof FoxpageCSRHooks]: FoxpageCSRHooks[K];
};
export type CSRPlugin = () => {
    visitor: CSRPluginVisitor | (() => CSRPluginVisitor) | (() => Promise<CSRPluginVisitor>);
};
export interface CSRContext {
    readonly root: string;
    page: BrowserInitialStatePage;
    modules: BrowserModule[];
    structures: BrowserStructure[];
    structureMap: Record<string, BrowserStructure>;
    resource: BrowserResource;
    renderOptions: RenderOptions;
    plugins: Record<string, CSRPlugin>;
    loader: CSRLoader;
}
