@logicflow/extension
Version:
LogicFlow Extensions
184 lines (183 loc) • 6.43 kB
TypeScript
/**
* LogicFlow 节点配置(导入/导出过程中使用的中间结构)
* - id/type/x/y:节点基本信息
* - text:节点文本的中心坐标与内容(值为未转义的原始字符串)
* - properties:节点的额外属性(会保留到 BPMN 的扩展字段)
*/
type NodeConfig = {
id: string;
properties?: Record<string, unknown>;
text?: {
x: number;
y: number;
value: string;
};
type: string;
x: number;
y: number;
};
/**
* 点坐标结构(用于边的路径点)
*/
type Point = {
x: number;
y: number;
};
/**
* LogicFlow 边配置(导入/导出过程中使用的中间结构)
* - id/type/sourceNodeId/targetNodeId:边的基本信息
* - pointsList:边的路径点(用于 BPMN 的 di:waypoint)
* - text:边文本的位置与内容(值为未转义的原始字符串)
* - properties:边的扩展属性
*/
type EdgeConfig = {
id: string;
sourceNodeId: string;
targetNodeId: string;
type: string;
startPoint?: {
x: number;
y: number;
};
endPoint?: {
x: number;
y: number;
};
text?: {
x: number;
y: number;
value: string;
};
pointsList?: Point[];
properties: Record<string, unknown>;
};
/**
* 将普通 JSON 转换为 XML 风格 JSON(xmlJson)
* 输入:任意 JSON 对象;可选的保留属性字段 retainedFields
* 输出:遵循 XML 属性前缀约定的 xmlJson(属性键以 '-' 开头)
* 规则:
* - 原始字符串直接返回;数组逐项转换;对象根据键类型决定是否加 '-' 前缀。
* - 保留字段(fields)中出现的键以属性形式(带 '-')保留,否则视为子节点。
*/
declare function toXmlJson(retainedFields?: string[]): (json: string | any[] | Record<string, any>) => any;
/**
* 将 XML 风格 JSON(xmlJson)转换回普通 JSON(内部使用)
* 输入:遵循 '-' 属性前缀约定的 xmlJson
* 输出:去除前缀并恢复原有结构的普通 JSON
*/
declare function toNormalJson(xmlJson: any): {};
/**
* BpmnAdapter:基础适配器
*
* 作用:在 LogicFlow 数据与 BPMN JSON 之间进行转换,并注入 adapterIn/adapterOut 钩子。
* - processAttributes:导出时 BPMN process 的基础属性(可配置 isExecutable、id 等)。
* - definitionAttributes:导出时 BPMN definitions 的基础属性与命名空间声明。
* - shapeConfigMap:不同 BPMN 元素类型的默认宽高,用于坐标/Bounds 计算。
*/
declare class BpmnAdapter {
static pluginName: string;
static shapeConfigMap: Map<any, any>;
processAttributes: {
['-isExecutable']: string;
['-id']: string;
};
definitionAttributes: {
['-id']: string;
['-xmlns:xsi']: string;
['-xmlns:bpmn']: string;
['-xmlns:bpmndi']: string;
['-xmlns:dc']: string;
['-xmlns:di']: string;
['-targetNamespace']: string;
['-exporter']: string;
['-exporterVersion']: string;
[key: string]: any;
};
/**
* 构造函数
* - 注入 LogicFlow 的 adapterIn/adapterOut(处理 JSON 方向的适配)
* - 初始化 process 与 definitions 的基础属性
*/
constructor({ lf }: {
lf: any;
});
setCustomShape(key: any, val: any): void;
/**
* @param retainedFields?: string[] (可选)属性保留字段,retainedField会和默认的defaultRetainedFields:
* ["properties", "startPoint", "endPoint", "pointsList"]合并,
* 这意味着出现在这个数组里的字段当它的值是数组或是对象时不会被视为一个节点而是一个属性。
*/
/**
* adapterOut:将 LogicFlow 图数据转换为 BPMN JSON
* 输入:
* - data:LogicFlow GraphData
* - retainedFields:扩展属性保留字段
* 输出:BPMN JSON(包含 definitions/process/diagram/plane)
*/
adapterOut: (data: any, retainedFields?: string[]) => {
'bpmn:definitions': {
[key: string]: any;
"-id": string;
"-xmlns:xsi": string;
"-xmlns:bpmn": string;
"-xmlns:bpmndi": string;
"-xmlns:dc": string;
"-xmlns:di": string;
"-targetNamespace": string;
"-exporter": string;
"-exporterVersion": string;
};
};
/**
* adapterIn:将 BPMN JSON 转换为 LogicFlow 图数据
* 输入:bpmnData:BPMN JSON
* 输出:GraphConfigData(nodes/edges)
*/
adapterIn: (bpmnData: any) => {
nodes: NodeConfig[];
edges: EdgeConfig[];
} | undefined;
}
/**
* BpmnXmlAdapter:XML 适配器(继承 BpmnAdapter)
*
* 作用:处理 XML 输入/输出的适配,使用 xml2json/json2xml 完成格式转换。
* 特殊处理:在 XML 导入前对 name 属性的非法字符进行预处理转义,提升容错。
*/
declare class BpmnXmlAdapter extends BpmnAdapter {
static pluginName: string;
/**
* 构造函数
* - 覆盖 LogicFlow 的 adapterIn/adapterOut,使其面向 XML 输入与输出。
*/
constructor(data: any);
/**
* 预处理 XML:仅对 name 属性值进行非法字符转义(<, >, &),避免 DOM 解析失败。
* 注意:不影响已合法的实体(如 &),仅在属性值中生效,不修改其它内容。
*/
private sanitizeNameAttributes;
/**
* adapterXmlIn:将 BPMN XML 转换为 LogicFlow 图数据
* 输入:bpmnData:XML 字符串或对象
* 步骤:
* 1) 若为字符串,先对 name 属性进行预处理转义;
* 2) 使用 lfXml2Json 转换为 BPMN JSON;
* 3) 调用基础 adapterIn 转换为 GraphData。
*/
adapterXmlIn: (bpmnData: any) => {
nodes: NodeConfig[];
edges: EdgeConfig[];
} | undefined;
/**
* adapterXmlOut:将 LogicFlow 图数据转换为 BPMN XML
* 输入:
* - data:GraphData
* - retainedFields:保留属性字段
* 步骤:
* 1) 调用基础 adapterOut 生成 BPMN JSON;
* 2) 使用 lfJson2Xml 转为合法的 XML 字符串(包含属性与文本的转义)。
*/
adapterXmlOut: (data: any, retainedFields?: string[]) => string;
}
export { BpmnAdapter, BpmnXmlAdapter, toXmlJson, toNormalJson };
export default BpmnAdapter;