import { DSLQuery } from '@lingxiteam/dsl'; import { CHANGE_TYPE_ENUMS } from '../../Editor/VersHistoryRecord/const'; import { ChangeItem, DiffChangeItem, TabType, DataSourceType, CustomEventType, ACTION_TYPE, DetailsInfo, CompType, DataSourceMenuList, CustomEventMenuList, CompMenuList } from '../interface'; import { CustomFuctionsItem, DataSourceItemType } from '@lingxiteam/dsl/es/core/PropType'; import { MERGE_STATUS } from '../const'; import { DSLNode } from '@lingxiteam/dsl/lib/core/PropType'; export interface LevelItem { key: CHANGE_TYPE_ENUMS | string; isLoop?: boolean; children?: LevelItem[]; } declare class DiffUtils { private sourceList; private targetList; baseDSLCore: DSLQuery; sourceDSLCore: DSLQuery; targetDSLCore: DSLQuery; /** * 控件 map */ compMaps: Map[]>; compMap: { get(id: string, pathDeep?: number): DiffChangeItem | undefined; getList(id: string): DiffChangeItem[]; getAllList(): DiffChangeItem[]; }; /** * 数据源 map */ dataSourceMap: Map>; /** * 自定义事件 map */ customEventMap: Map>; /** * 控件菜单数据map * render */ compMenuMap: Map>; /** * 控件变动列表 */ get comps(): DiffChangeItem[]; /** * 数据源变动列表 */ get dataSources(): DiffChangeItem[]; /** * 自定义事件变动列表 */ get customEvents(): DiffChangeItem[]; constructor({ baseDSLCore, sourceDSLCore, targetDSLCore }: { baseDSLCore: DSLQuery; sourceDSLCore: DSLQuery; targetDSLCore: DSLQuery; }); init(sourceList: ChangeItem[], targetList: ChangeItem[]): void; /** * 从变动数据中提取变动的控件 */ private formatData; private getTargetItemBySourceItem; /** * 从数组中匹配对应项 */ queryList(query: { key: string; value?: any; fn?: (item: ChangeItem) => boolean; }[], list: ChangeItem[]): ChangeItem[]; /** * 获取控件 属性 样式 事件 变动项 * @param nodeId 控件id * @returns */ private getChangeDetail; /** * 变动是否为空 * @param changeNode 控件变动 * @returns boolean */ private changeIsEmpty; /** * 获取源分支变动 * @param nodeId 控件id * @returns */ private getSourceChange; /** * 获取目标分支变动 * @param nodeId 控件id * @returns */ private getTargetChange; /** * 比对各个分支下子节点的变动情况 * @param nodeId 控件id * @param fixFlag 是否需要补齐子元素 */ private diffCompChildren; /** * 获取控件树 */ compMenuList(): CompMenuList[]; /** * 获取数据源列表 */ get dataSourceMenuList(): DataSourceMenuList[]; /** * 获取自定义事件列表 */ get customEventMenuList(): CustomEventMenuList[]; /** * 根据类型获取详情 * @param id id * @param type 类型 */ getDetailsByType(id: string, type: TabType): DetailsInfo | DetailsInfo | DetailsInfo | null; /** * 获取控件信息 * @param id 控件id or renderId */ getCompInfo(_id: string): DetailsInfo; private getSourceInfoById; /** * 根据节点id节点数据 * @param nodeId 节点id * @param list 节点列表 * @returns */ findChangeItemByNodeId(nodeId: string, list: ChangeItem[]): ChangeItem | undefined; /** * 根据节点id获取子节点数据 * @param nodeId 节点id * @param list * @returns */ queryChildrenByNodeId(nodeId: string, list: ChangeItem[]): ChangeItem[]; /** * 根据变动数据还原出数据源 * @param list 变动列表 * @param baseInfo 基础数据源 */ getFormatData(_baseInfo: DataSourceItemType | undefined, _diffInfo: DataSourceItemType | undefined, changeItemList: ChangeItem[]): DataSourceItemType | undefined; /** * 获取数据源信息 * @param dataSourceId 数据源id */ getDataSourceInfo(dataSourceId: string): DetailsInfo; private getEventInfoById; /** * 根据事件id获取版本信息 * @param eventId 事件id */ getCustomEventInfo(eventCode: string): DetailsInfo; /** * 根据操作类型获取列表 * @param list 筛选列表 * @param action 动作 */ getFilterListByType(list: ChangeItem[], action: ACTION_TYPE): ChangeItem[]; /** * 根据变动集合判断是否已解决所有冲突 * @param changeItemList 变动列表 * @param mergeTypeMap 变动类型集合 */ private validateConflict; /** * 更新数据源 */ private changeDataSourceTypeByDSLCore; /** * 更新自定义事件 */ private changeCustomFunctionTypeByDSLCore; /** * 更新组件 * 热补移动:一增一删两条记录 * 1. 执行新增时,先把迭代版本现有的删除 * 2. 执行删除时,若有关联节点,则忽略此处删除操作 * 热补修改 * 1. 找到热补的控件,查看迭代上是否在同一个父元素, * 2. 找到跟热补一致的父元素,更新该控件 * 3. 迭代没有该元素,插入操作 * 4. 迭代上有该元素,在不同位置,先删除再插入 * 热补修改为根节点 * 直接更新根节点 * 热补新增 * * 热补删除 * 迭代执行删除 * */ private changeCompTypeByDSLCore; /** * 合并组件 * @param param0 */ private mergeCompNodeList; /** * 根据合并操作合并某类型dsl */ private mergeNodeList; /** * 根据控件id获取有效的冲突节点的renderId * @param nodeId 节点id */ private getRenderIdByNodeId; /** * 校验控件冲突是否已经全部解决 * @param mergeTypeMap 已处理的控件冲突 */ private validateCompConFlict; /** * 生成合并后的dsl */ mergeDsl(mergeType: Record>): Promise<{ components: never[]; path: string[]; setEvents: any[]; props?: Record | undefined; style?: Record | undefined; customStyle?: Record | undefined; label?: string | undefined; compName?: string | undefined; compType?: string | number | undefined; compLib?: string | undefined; isContainer?: boolean | undefined; pageContainerType?: string | undefined; pageName?: string | undefined; pagePath?: string | undefined; layout?: string | undefined; pageDynamicFlag?: boolean | undefined; createdEditorVersion?: string | undefined; editorVersion?: string | undefined; terminalType?: string | undefined; hideNavBar?: string | undefined; dataSource?: import("@lingxiteam/dsl/lib/core/PropType.data").DataSourceItemType[] | undefined; globalDataSource?: import("@lingxiteam/dsl/lib/core/PropType.data").GlobalDataSourceType[] | undefined; customFuctions?: import("@lingxiteam/dsl/lib/core/PropType").CustomFuctionsItem[] | undefined; compState?: import("@lingxiteam/dsl/lib/core/PropType").CompStateType[] | undefined; callbacks?: any[] | undefined; publicState?: any[] | undefined; searchParams?: { name: string; code: string; }[] | undefined; routerData?: { name: string; code: string; }[] | undefined; id: string; } | null>; } export default DiffUtils;