import { Application } from '../application';
import { MessageArray } from '../common/index';
import { FoxpageBuildHooks, FoxpageStaticComponent } from '../hook';
import { FPPackageEntrySource } from '../manager';
import { StructureNode } from '../structure';
export interface ComponentLoadOption {
    autoDownloadComponent?: boolean;
    useStructureVersion?: boolean;
    isPreviewMode?: boolean;
    isCanary?: boolean;
    isSemver?: boolean;
    reLoadComponent?: boolean;
}
export interface ComponentLoader {
    app?: Application;
    opt: ComponentLoadOption;
    load(schemas: StructureNode[]): void;
    getLoadedComponents(): Map<string, FoxpageComponent>;
    getLoadedDependencies(): Map<string, FoxpageComponent>;
    destroy(): void;
}
export interface FoxpageComponentMeta {
    useStyledComponents?: boolean;
    isMountNode?: boolean;
    isHead?: boolean;
    isBody?: boolean;
    isCSREntry?: boolean;
    [key: string]: any;
}
export interface FoxpageComponentFactory extends Pick<FoxpageBuildHooks, 'beforeNodeBuild'> {
}
export interface FoxpageComponent extends FoxpageStaticComponent {
    name: string;
    type?: string;
    version?: string;
    isLive?: boolean;
    browserURL: string;
    debugURL: string;
    nodeURL: string;
    cssURL: string;
    source?: FPPackageEntrySource;
    meta: FoxpageComponentMeta;
    supportSSR: boolean;
    factory?: FoxpageComponentFactory;
    dependencies?: string[];
    messages?: MessageArray;
    isBuiltinComponent?: boolean;
}
export interface ComponentNodeInjectProps {
    $locale?: string;
    $runtime: {
        isServer: boolean;
        isBrowser: boolean;
        clientType: 'server' | 'client';
    };
    $eid: string;
    $ename: string;
    $elabel: string;
    $etype: string;
    $dsl: {
        id: string;
        name?: string;
        fileId?: string;
        version?: string | number;
        appId: string;
        structure: {
            id: string;
            name: string;
            label: string;
            type: string;
            version?: string;
        };
    };
}
