import { FoxpageComponent } from '../component';
import { StructureNode } from '../structure';
export interface ModuleConfig<T = any, M extends Record<string, any> = Record<string, any>> {
    version?: string;
    isLive?: boolean;
    deps?: string[];
    softDeps?: string[];
    type?: 'umd' | 'css' | 'js';
    url?: string;
    define?: () => T;
    load?: () => Promise<T>;
    injectWindow?: string;
    umdModuleName?: string;
    alias?: string[];
    meta?: M;
}
export type ModuleConfigs = Record<string, ModuleConfig>;
export interface BrowserInitialStateOption {
    renderMethod: 'hydrate' | 'render';
}
export interface BrowserInitialStatePage {
    appId: string;
    slug: string;
    pageId: string;
    name?: string;
    locale?: string;
    fileId?: string;
    version?: string;
}
export interface BrowserResource {
    requirejsLink: string;
    libs: ModuleConfigs;
    plugins?: ModuleConfigs;
}
export interface BrowserModule extends Pick<FoxpageComponent, 'name' | 'version' | 'meta' | 'isLive'> {
    url: string;
    deps?: string[];
}
export interface BrowserStructure extends StructureNode {
    childrenIds: string[];
}
export interface BrowserInitialState {
    root: string;
    page: BrowserInitialStatePage;
    modules: BrowserModule[];
    structures: BrowserStructure[];
    resource: BrowserResource;
    option: BrowserInitialStateOption;
}
