/**
 * DEHub类型定义模块
 * 包含了DEHub系统中使用的所有类型定义、接口和工具函数
 * @module DETypes
 */
import { EventContext } from ".";
/**
 * 对象标签类型
 * 用于标识和分类系统中的各种对象
 */
export type ObjTag = Record<string, string>;
/**
 * 带标签的对象接口
 * 所有需要被DEHub管理的对象都需要实现此接口
 */
export interface ObjWithTag extends DERecord {
    /**
     * 标签，组件建议使用{role:string,id:string}的结构定义组件标签，
     * role代表组件角色，如输入组件input示例：{role:'input',id:'username'}
     */
    readonly tag: Tag;
}
/**
 * 标签类
 * 用于管理对象标签，提供标签比较和序列化功能
 */
export declare class Tag {
    #private;
    constructor(tag: ObjTag);
    /**
     * 获取标签成员
     */
    get members(): ObjTag;
    /**
     * 获取标签路径
     */
    get path(): string;
    /**
     * 获取标签键列表
     */
    get keys(): string[];
    /**
     * 比较标签是否相等
     * @param others - 要比较的标签，可以是Tag对象、ObjTag对象或字符串
     * @returns 是否相等
     */
    equal(others: Tag | ObjTag | string): boolean;
    toString(): string;
}
/**
 * 基础数据记录类型
 */
export type DERecord = Record<string, any>;
/**
 * 事件处理函数类型
 * @param context 事件上下文
 */
export type DEEventFunction = (context: EventContext) => void | Promise<void>;
/**
 * 系统事件名称枚举
 */
export declare enum EventNames {
    /** 值改变事件 */
    ValueChanged = "$valueChanged",
    /** 状态改变事件 */
    StatusChanging = "$statusChanged",
    /** 提交事件 */
    Submit = "$submit",
    /** 状态改变事件 */
    StateChanging = "$stateChanged",
    /** 组件挂载事件 */
    Mounting = "$mount",
    /** 组件注册事件 */
    Registration = "$reg",
    /** 组件卸载事件 */
    WillUnmount = "$unmount",
    /** 所有组件加载完成事件 */
    ComponentsLoaded = "$allCmpLoaded",
    /** 异常事件 */
    Exception = "$error"
}
/**
 * 组件配置选项接口
 */
export interface DECompOption {
    /** 是否自动准备就绪 */
    autoReady?: boolean;
    /** 是否使用会话存储 */
    useSession?: boolean;
}
/**
 * 组件接口
 * @template T 组件状态类型
 */
export interface IDEComp<T> extends ObjWithTag {
    /** 组件状态 */
    readonly state: T;
    /** 组件配置选项 */
    readonly options: DECompOption;
    /**
     * 更新组件状态
     * @param target 更新的状态内容
     * @param deep 是否深度更新
     */
    update: (target: Partial<T>, deep?: boolean) => Promise<Partial<T>>;
    /** 组件是否就绪 */
    readonly isReady: boolean;
    /** 等待组件就绪 */
    waitReady: () => Promise<void>;
    /** 注册状态改变事件处理函数 */
    onStateChanging: (callback: DEEventFunction) => void;
    /** 移除事件处理函数 */
    removeHandler: (callback: DEEventFunction) => void;
    /** 组件的其他属性 */
    [propery: string]: any;
}
/**
 * 数据对象状态枚举
 */
export declare enum ObjectStatus {
    /** 新对象，未开始加载 */
    New = "new",
    /** 正常可用 */
    Ready = "ready",
    /** 加载中 */
    Loading = "loading",
    /** 已清空 */
    Clear = "clear",
    /** 已重置 */
    Reset = "reset",
    /** 正在上传 */
    Uploading = "uploading",
    /** 标记为删除 */
    Deleting = "deleting",
    /** 已删除 */
    Deleted = "deleted",
    /** 加载失败 */
    Failed = "failed",
    /** 加载超时 */
    Timeout = "Timeout"
}
/**
 * 数据集选项类型
 * 可以是标签数组或标签与选项的元组数组
 */
export type DatasetOptions = (Tag | [Tag, DEDataOptions?])[];
/**
 * 数据选项接口
 */
export interface DEDataOptions {
    /** 数据加载模式 */
    loadingMode?: 'none' | 'localDB' | 'custom';
    /** 默认值，清空数据后仍会存在 */
    default?: DERecord;
    /** 状态对象 */
    state?: DERecord;
    /** 数据操作超时时间(ms) */
    timeout?: number;
    /** 数据库名称 */
    database?: string;
    /** 是否保存脏数据 */
    saveDirtyData?: boolean;
    /** 是否自动加载数据 */
    autoLoad?: boolean;
    /** 重试间隔(ms) */
    retryInterval?: number;
    /** 重试次数限制 */
    retryLimit?: number;
    /** 过期时间(s) */
    expireTime?: number;
}
/**
 * 事件阶段枚举
 */
export declare enum EventStage {
    /** 操作前阶段 */
    PreOperation = "pre",
    /** 操作后阶段 */
    PostOperation = "post"
}
/**
 * 数据对象接口
 */
export interface IDataObject {
    /** 数据内容 */
    data: DERecord;
    /** 默认值 */
    default?: DERecord;
    /** 虚拟数据 */
    virtual: DERecord;
    /** 过期时间 */
    expires?: number;
    /** 状态对象 */
    state?: DERecord;
    /** 数据状态 */
    status: ObjectStatus;
    /** 重试状态 */
    retryStatus?: ObjectStatus;
    /** 重试次数 */
    retryCount?: number;
}
/**
 * 组件对象接口
 */
export interface ICompoentObject<T> {
    /** 组件选项 */
    options: DERecord;
    /** 组件状态 */
    state: T;
}
/**
 * 数据接口
 */
export interface IData extends ObjWithTag {
    /** 数据选项 */
    readonly options: DEDataOptions;
    /** 数据状态 */
    status: ObjectStatus;
    /** 默认值 */
    readonly default: DERecord;
    /** 原始数据 */
    readonly original: DERecord;
    /** 当前数据 */
    readonly data: DERecord;
    /** 脏数据 */
    readonly dirty: DERecord;
    /** 虚拟数据 */
    readonly virtual: DERecord;
    /** 数据键列表 */
    readonly keys: string[];
    /** 过期时间 */
    readonly expires?: number;
    /** 状态对象 */
    state?: DERecord;
    /**
     * 更新状态
     * @param state 新的状态对象
     */
    updateState: (state: DERecord) => void;
    /**
     * 获取属性值
     * @param attribute 属性名
     */
    get: (attribute: string) => any;
    /**
     * 设置属性值
     * @param attribute 属性名
     * @param value 属性值
     * @param isVirtual 是否为虚拟数据
     */
    set: (attribute: string, value: any, isVirtual?: boolean) => Promise<DERecord>;
    /**
     * 更新数据
     * @param target 目标数据
     * @param noTrigger 是否不触发事件
     */
    update: (target: DERecord, noTrigger: boolean | undefined) => DERecord;
    /**
     * 提交数据
     * @param target 目标数据
     * @param mergeData 是否合并数据
     */
    submit: (target?: DERecord, mergeData?: boolean) => void;
    /** 重置数据 */
    reset: () => void;
    /** 删除数据 */
    delete: () => void;
    /**
     * 加载数据
     * @param force 是否强制加载
     */
    load: (force?: boolean) => void;
    /** 清空数据 */
    clear: () => void;
    /**
     * 等待数据状态
     * @param status 目标状态
     */
    until: (status: ObjectStatus.Deleted | ObjectStatus.Ready | ObjectStatus.Failed | ObjectStatus.Timeout) => Promise<void>;
}
/**
 * 触发事件上下文接口
 */
export interface EmitContext {
    /** 事件发送者 */
    readonly sender: ObjWithTag | IData | IDEComp<any>;
    /** 事件名称 */
    readonly event: string;
    /** 事件阶段 */
    readonly stage: EventStage;
    /** 事件详情 */
    readonly detail?: any;
    /** 数据状态 */
    readonly status?: ObjectStatus;
    /** 数据属性 */
    readonly attribute?: string;
    /** 状态属性 */
    readonly property?: string;
    /** 数据库名称 */
    readonly database?: string;
}
/**
 * 数据更新参数接口
 */
export interface DataUpdateArgs {
    /** 目标值 */
    value: any;
    /** 更新前的值 */
    preImage?: any;
    /** 更新后的值 */
    postImage?: any;
}
/**
 * 标签序列化工具对象
 */
export declare const TagsSerializer: {
    /**
     * 将标签对象转换为路径字符串
     * @param tag 标签对象
     * @returns 路径字符串
     */
    toPath: (tag: ObjTag) => string;
    /**
     * 获取标签及其所有子标签
     * @param baseTags 基础标签
     * @returns 标签路径数组
     */
    selfAndChildTags: (baseTags: Tag) => string[];
    /**
     * 从路径字符串解析标签对象
     * @param path 路径字符串
     * @returns 标签对象
     */
    fromPath: (path: string) => ObjTag;
};
/**
 * 合并对象工具函数
 * @param objA 基础对象
 * @param objB 主要合并对象
 * @param deep 是否深度合并
 * @returns 合并后的对象
 */
export declare const mergeObject: (objA: any, objB: any, deep?: boolean) => any;
/**
 * 清除对象中的空节点
 * @param obj 要清理的对象
 * @returns 清理后的对象
 */
export declare const clearNullNodes: (obj: any) => any;
/**
 * 获取两个对象之间的差异
 * @param obj1 目标对象
 * @param obj2 对比对象
 * @returns 差异对象
 */
export declare const getDiff: (obj1: Record<string, any>, obj2: Record<string, any>) => Record<string, any>;
/**
 * 延时函数
 * @param millisecond 延时毫秒数
 * @returns Promise<void>
 */
export declare const sleep: (millisecond: number) => Promise<void>;
/**
 * 检查Promise结果中的rejected项
 * @param results Promise结果数组
 * @throws 如果存在rejected的Promise
 */
export declare const rejectedCheck: (results: PromiseSettledResult<any>[]) => void;
/**
 * 创建数据对象的代理
 * 提供不区分大小写的属性访问
 * @param obj 要代理的对象
 * @returns Proxy对象
 */
export declare const DataProxy: (obj: DERecord) => DERecord;
