import { IPublicTypeProjectSchema, ResultDir } from '@alilc/lowcode-types';
import { IProjectBuilder, IProjectPlugins, IProjectTemplate, ISchemaParser, PostProcessor, ResourceListType } from '../types';
import { IContextData, ProjectPostProcessor, ProjectPreProcessor } from '../types/core';
export interface ProjectBuilderInitOptions {
    /** 项目模板 */
    template: IProjectTemplate;
    /** 项目插件 */
    plugins: IProjectPlugins;
    /** 模块后置处理器 */
    postProcessors: PostProcessor[];
    /** Schema 解析器 */
    schemaParser?: ISchemaParser;
    /** 项目级别的前置处理器 */
    projectPreProcessors?: ProjectPreProcessor[];
    /** 项目级别的后置处理器 */
    projectPostProcessors?: ProjectPostProcessor[];
    /** 是否处于严格模式 */
    inStrictMode?: boolean;
    /** 一些额外的上下文数据 */
    extraContextData?: Record<string, unknown>;
    /**
     * 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;
    /** 一些额外的上下文数据 */
    readonly extraContextData: IContextData;
    constructor(builderOptions: ProjectBuilderInitOptions);
    generateProjectOne(originalSchema: IPublicTypeProjectSchema | string): Promise<ResultDir>;
    /**
     * 生成整个项目结构
     * @param originalSchema
     * @param resourceList
     */
    generateProject(originalSchema: IPublicTypeProjectSchema | string | IPublicTypeProjectSchema[], resourceList: ResourceListType[]): Promise<ResultDir>;
    private createModuleBuilders;
    /**
     * 自定义插槽代码生成
     * @param builders
     * @param parseResult
     * @param buildResult
     * @private
     */
    private generateExtraSlots;
}
export declare function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder;
