import { ResultDir, IPublicTypeProjectSchema } from '@gant-lowcode/lowcode-types';
import { IProjectBuilder, IProjectPlugins, IProjectTemplate, ISchemaParser, PostProcessor } from '../types';
import { ProjectPreProcessor, ProjectPostProcessor, IContextData } from '../types/core';
export interface ProjectBuilderInitOptions {
    /** 项目模板 */
    template: (rootPaths: string[], pagePaths: string[], configPaths: string[]) => IProjectTemplate;
    /** 项目插件 */
    plugins: IProjectPlugins;
    /** 模块后置处理器 */
    postProcessors: PostProcessor[];
    /** Schema 解析器 */
    schemaParser?: ISchemaParser;
    /** 项目级别的前置处理器 */
    projectPreProcessors?: ProjectPreProcessor[];
    /** 项目级别的后置处理器 */
    projectPostProcessors?: ProjectPostProcessor[];
    /** 选择模式 incremental 递增使用 | fully 完整使用 */
    mode?: 'incremental' | 'fully';
    /** 是否处于严格模式 */
    inStrictMode?: boolean;
    /** 一些额外的上下文数据 */
    extraContextData?: Record<string, unknown>;
    /** 产物路径，默认为[src] */
    rootPaths?: string[];
    /** 页面路径，默认为['src', 'pages'] */
    pagePaths?: string[];
    /** 配置路径，默认为[] */
    configPaths?: string[];
    /**
     * Hook which is used to customize original options, we can reorder/add/remove plugins/processors
     * of the existing solution.
     */
    customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;
}
export declare class ProjectBuilder implements IProjectBuilder {
    /** 项目模板 */
    private template;
    /** 项目插件 */
    private plugins;
    /** 模块后置处理器 */
    private postProcessors;
    /** Schema 解析器 */
    private schemaParser;
    /** 项目级别的前置处理器 */
    private projectPreProcessors;
    /** 项目级别的后置处理器 */
    private projectPostProcessors;
    /** 是否处于严格模式 */
    readonly inStrictMode: boolean;
    /** 选择模式 incremental 递增使用 | fully 完整使用 */
    readonly mode: 'incremental' | 'fully';
    /** 一些额外的上下文数据 */
    readonly extraContextData: IContextData;
    constructor(builderOptions: ProjectBuilderInitOptions);
    generateProject(originalSchema: IPublicTypeProjectSchema | string): Promise<ResultDir>;
    private createModeFully;
    private createModuleBuilders;
    private generateExtraSlots;
}
export declare function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder;
