UNPKG

dehub

Version:
376 lines (375 loc) 9.69 kB
/** * 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;