dehub
Version:
Data&Event MessageHub.
376 lines (375 loc) • 9.69 kB
TypeScript
/**
* 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;