import { RuleSetCondition, RuleSetRule } from 'webpack';
import { Options as ProxyOptions } from 'koa-proxy';
import { OrNil } from "../utils/declaration";
import { SdinProject } from './project';
import { SdinAbstractModule, SdinAbstractModuleDatas, SdinAbstractModuleParams } from './abstract-module';
import { SdinApplicationPage, SdinApplicationPageElement, SdinApplicationPageParams, SdinApplicationPageSkeleton } from './application-page';
export type SdinApplicationModuleType = 'application';
export type SdinApplicationModuleMode = 'csr';
export interface SdinApplicationModuleDatas extends SdinAbstractModuleDatas {
    SDIN_MODULE_TITLE: string | null;
    SDIN_MODULE_PATH: string;
    SDIN_MODULE_ASSETS_PATH: string;
}
/**
 * Sdin 应用模块配置选项
 */
export interface SdinApplicationModuleParams extends SdinAbstractModuleParams<SdinApplicationModuleType, SdinApplicationModuleMode> {
    /** 模块构建模式（默认：csr） */
    mode?: SdinApplicationModuleMode;
    /** 模块标题 */
    title?: string;
    /** 模块源码目录（默认：src，相对项目根目录而言） */
    src?: string;
    /** 模块目标目录（默认：tar/模块构建模式，相对项目根目录而言） */
    tar?: string;
    /** 模块网络路径（默认：/模块名称/） */
    path?: string;
    /** 模块素材源码目录（默认：pro/assets，相对项目根目录而言） */
    astSrc?: string;
    /** 模块素材网络路径（默认：ast/，相对模块网络路径而言） */
    astPath?: string;
    /** 压缩代码（默认：true） */
    minify?: boolean;
    /** 丑化代码（默认：true） */
    uglify?: boolean;
    /** 源代码映射（默认：压缩或丑化时启用） */
    sourceMap?: boolean;
    /** 去除代码里使用到的外部模块 */
    externals?: Record<string, string>;
    /** SASS 模块（默认：开启） */
    sassModule?: boolean;
    /** 混淆 CSS 类名（默认：开启） */
    mixinClass?: boolean;
    /** babel 编译包含项 */
    babelIncludes?: OrNil<RuleSetCondition>[];
    /** babel 编译排除项 */
    babelExcludes?: OrNil<RuleSetCondition>[];
    /** 修改文本打包规则（仅允许修改部分值）*/
    rawRule?: Partial<RuleSetRule>;
    /** 修改字体打包规则（仅允许修改部分值）*/
    fontRule?: Partial<RuleSetRule>;
    /** 修改图片打包规则（仅允许修改部分值）*/
    imageRule?: Partial<RuleSetRule>;
    /** 修改音频打包规则（仅允许修改部分值）*/
    audioRule?: Partial<RuleSetRule>;
    /** 修改视频打包规则（仅允许修改部分值）*/
    videoRule?: Partial<RuleSetRule>;
    /** 添加打包规则（可以覆盖部分默认规则） */
    rules?: OrNil<RuleSetRule>[];
    /** 开发模式下，启用日志（默认：不启用） */
    devLog?: boolean;
    /** 开发模式下，在页面标题上显示表情符号（默认：⚡） */
    devEmoji?: string;
    /** 开发环境下，服务器的端口号（默认：8080） */
    devPort?: number;
    /** 开发环境下，服务器的代理设置 <https://github.com/edorivai/koa-proxy> */
    devProxies?: OrNil<ProxyOptions>[];
    /** 页面列表 */
    pages: OrNil<SdinApplicationPageParams>[];
    /** 根页面名称（默认：index） */
    index?: string;
    /** 错误页面名称（默认：error） */
    error?: string;
    /** 页面元信息标签列表 */
    metas?: OrNil<SdinApplicationPageElement>[];
    /** 页面样式标签列表 */
    links?: OrNil<SdinApplicationPageElement>[];
    /** 页面样式标签列表 */
    styles?: OrNil<SdinApplicationPageElement>[];
    /** 页面脚本标签列表 */
    scripts?: OrNil<SdinApplicationPageElement>[];
    /** 页面骨架渲染器 */
    skeleton?: SdinApplicationPageSkeleton;
}
/**
 * Sdin 应用模块配置
 */
export declare class SdinApplicationModule extends SdinAbstractModule<SdinApplicationModuleType, SdinApplicationModuleMode, SdinApplicationModuleParams, SdinApplicationModuleDatas> {
    /** 模块标题 */
    readonly title: string | null;
    /** 模块网络路径 */
    readonly path: string;
    /** 模块素材源码目录 */
    readonly astSrc: string;
    /** 模块素材网络路径（相对模块网络路径而言） */
    readonly astPath: string;
    /** 压缩代码 */
    readonly minify: boolean;
    /** 丑化代码 */
    readonly uglify: boolean;
    /** 源代码映射 */
    readonly sourceMap: boolean;
    /** 去除代码里使用到的外部模块 */
    readonly externals: Record<string, string>;
    /** SASS 模块 */
    readonly sassModule: boolean;
    /** 混淆 CSS 类名 */
    readonly mixinClass: boolean;
    /** babel 编译包含项 */
    readonly babelIncludes: RuleSetCondition[];
    /** babel 编译排除项 */
    readonly babelExcludes: RuleSetCondition[];
    /** 修改文本打包规则 */
    readonly rawRule: Partial<RuleSetRule>;
    /** 修改字体打包规则 */
    readonly fontRule: Partial<RuleSetRule>;
    /** 修改图片打包规则 */
    readonly imageRule: Partial<RuleSetRule>;
    /** 修改音频打包规则 */
    readonly audioRule: Partial<RuleSetRule>;
    /** 修改视频打包规则 */
    readonly videoRule: Partial<RuleSetRule>;
    /** 添加打包规则 */
    readonly rules: RuleSetRule[];
    /** 开发模式下，启用日志 */
    readonly devLog: boolean;
    /** 开发模式下，在页面标题上显示表情符号 */
    readonly devEmoji: string;
    /** 开发模式下，服务器的端口号 */
    readonly devPort: number;
    /** 开发模式下，服务器的代理设置 */
    readonly devProxies: ProxyOptions[];
    /** 数据宏定义 */
    readonly datas: SdinApplicationModuleDatas;
    /** 页面列表 */
    readonly pages: SdinApplicationPage[];
    /** 根页面 */
    readonly index: SdinApplicationPage | null;
    /** 错误页面 */
    readonly error: SdinApplicationPage | null;
    constructor(project: SdinProject, params: SdinApplicationModuleParams);
    private createPages;
    validate(): Promise<void>;
    /**
     * 获得模块网络路径下的绝对路径
     */
    withPath(...pathSegments: string[]): string;
    /**
     * 设置环境标识
     */
    setEnv(it: 'pro' | 'dev'): void;
}
