import { BaseAPI, BaseService, BaseServiceOptions, GeneratorAPI as IGeneratorAPI, Plugin, ProcessFileHandler, ProcessFileInfo } from '@mpflow/service-core';
import { Options as EjsOptions } from 'ejs';
import { AsyncSeriesHook, AsyncSeriesWaterfallHook } from 'tapable';
export declare class GeneratorAPI
= Generator
> extends BaseAPI
implements IGeneratorAPI
{
constructor(id: string, service: S);
/**
* 拓展 package.json
* @param toMerge
*/
extendPackage(toMerge: Record): void;
renderDir(source: string, targetPath?: string, options?: {
pattern?: string;
additionalData?: Record;
ejsOptions?: EjsOptions;
}): void;
renderFile(source: string, targetPath: string, options?: {
additionalData?: Record;
ejsOptions?: EjsOptions;
}): void;
processFile(handler: ProcessFileHandler): void;
processFile(filter: string | string[], handler: ProcessFileHandler): void;
}
export interface GeneratorOptions extends BaseServiceOptions {
depSources?: Record;
files?: Record;
}
export declare class Generator extends BaseService
{
/**
* package.json 中依赖的来源
*/
depSources: Record;
/**
* 生成文件任务队列
*/
renderTaskQueue: (() => Promise>)[];
/**
*
*/
hooks: {
/**
* 加载阶段,加载文件系统中的文件
*/
load: AsyncSeriesHook;
/**
* 生成阶段
*/
generate: AsyncSeriesHook, (() => Promise>)[], ProcessFileInfo[]>;
/**
* 处理阶段,根据已有文件进行对应处理
*/
process: AsyncSeriesWaterfallHook;
/**
* 写入阶段,将新生成的或处理后的文件写入文件系统
*/
write: AsyncSeriesHook, any, any>;
};
constructor(context: string, { depSources, files: innerFiles, ...options }?: GeneratorOptions);
/**
* 触发 generator
* @param installModules
*/
generate(installModules?: boolean): Promise;
/**
* 执行所有的插件 generator
*/
initPlugins(): Promise;
extendPackage(toMerge: Record, id: string): void;
/**
* 将一个目录渲染到虚拟树中
*/
renderDir(source: string, targetPath?: string, options?: {
pattern?: string;
additionalData?: Record;
ejsOptions?: EjsOptions;
}): void;
/**
* 将一个目录渲染到虚拟树中
*/
renderFile(source: string, targetPath: string, options?: {
additionalData?: Record;
ejsOptions?: EjsOptions;
}): void;
/**
* 注册文件处理回调
* @param handler
*/
processFile(id: string, handler: ProcessFileHandler): void;
processFile(id: string, filter: string | string[], handler: ProcessFileHandler): void;
}