import { PackageInfo } from "../utils/npm";
import { SdinAbstractConfig } from './abstract-config';
/**
 * Sdin 项目配置参数
 */
export interface SdinAbstractProjectParams {
    /** 项目根目录（默认：当前工作目录） */
    root?: string;
    /** 模块别名（默认：不设置，相对项目根目录而言） */
    alias?: Record<string, string>;
    /** 代码宏定义（key 是原代码，value 是替换后的代码） */
    codes?: Record<string, string>;
    /** 数据宏定义（key 是原代码，value 是替换后的数据。在网页应用里，它会被挂载到全局变量 datas 上） */
    datas?: Record<string, string>;
}
/**
 * Sdin 配置
 */
export declare abstract class SdinAbstractProject<TAncestor extends object | null, TParent extends SdinAbstractProject<any, any, any, any> | null, TParams extends SdinAbstractProjectParams, TDatas extends Record<string, any>> extends SdinAbstractConfig<TAncestor, TParent, TParams> {
    /** 项目根目录 */
    readonly root: string;
    /** 项目临时目录 */
    readonly tmp: string;
    /** 项目公共目录 */
    readonly pro: string;
    /** 项目配置目录 */
    readonly cfg: string;
    /** 项目包信息 */
    readonly pkg: PackageInfo;
    /** 模块别名 */
    readonly alias: Record<string, string>;
    /** 代码宏定义 */
    readonly codes: Record<string, string>;
    /** 数据宏定义 */
    abstract datas: TDatas;
    constructor(ancestor: TAncestor, parent: TParent, params: TParams);
    /**
     * 获取项目根目录下的绝对路径
     */
    withRoot(...pathSegments: string[]): string;
    /**
     * 获得项目临时目录下的绝对路径
     */
    withTmp(...pathSegments: string[]): string;
    /**
     * 获得项目公共目录下的绝对路径
     */
    withPro(...pathSegments: string[]): string;
    /**
     * 获得项目配置目录下的绝对路径
     */
    withCfg(...pathSegments: string[]): string;
    /**
     * 将用户定义的代码和数据宏定义，转成可用于编译的宏定义
     */
    toMacros(): {
        [x: string]: string;
    };
    /**
     * 将 alias 转换成 tsconfig paths
     */
    toTsCfgPaths(): Record<string, string[]>;
}
