import type { IConnections, INode, INodeParameters, IWorkflowBase, NodeParameterValueType } from '.'; import { type ConnectionsDiff } from './connections-diff'; export type WorkflowDiffBase = Omit & { name: string | null; }; export type DiffableNode = Pick; export type DiffableWorkflow = { nodes: N[]; connections: IConnections; createdAt: Date; authors?: string; }; export declare const enum NodeDiffStatus { Eq = "equal", Modified = "modified", Added = "added", Deleted = "deleted" } export type NodeDiff = { status: NodeDiffStatus; node: T; }; export type WorkflowDiff = Map>; export declare function compareNodes(base: T | undefined, target: T | undefined): boolean; export declare function compareWorkflowsNodes(base: T[], target: T[], nodesEqual?: (base: T | undefined, target: T | undefined) => boolean): WorkflowDiff; export declare class WorkflowChangeSet { readonly nodes: WorkflowDiff; readonly connections: ConnectionsDiff; constructor(from: DiffableWorkflow, to: DiffableWorkflow); } /** * Returns true if `s` contains all characters of `substr` in order * e.g. s='abcde' * substr: * 'abde' -> true * 'abcd' -> false * 'abced' -> false */ export declare function stringContainsParts(s: string, substr: string): boolean; export declare function parametersAreSuperset(prev: unknown, next: unknown): boolean; declare function mergeAdditiveChanges(_prev: DiffableWorkflow, next: DiffableWorkflow, diff: WorkflowChangeSet): boolean; declare function makeMergeDependingOnSizeRule(mapping: Map): (prev: DiffableWorkflow, next: DiffableWorkflow, _wcs: WorkflowChangeSet, metaData: DiffMetaData) => boolean; declare function skipDifferentUsers(prev: DiffableWorkflow, next: DiffableWorkflow): boolean; export declare const RULES: { mergeAdditiveChanges: typeof mergeAdditiveChanges; makeMergeDependingOnSizeRule: typeof makeMergeDependingOnSizeRule; }; export declare const SKIP_RULES: { makeSkipTimeDifference: (timeDiffMs: number) => (prev: DiffableWorkflow, next: DiffableWorkflow) => boolean; skipDifferentUsers: typeof skipDifferentUsers; }; export type DiffMetaData = Partial<{ workflowSizeScore: number; }>; export type DiffRule = (prev: W, next: W, diff: WorkflowChangeSet, metaData: Partial) => boolean; export declare function determineNodeSize(parameters: INodeParameters | NodeParameterValueType): number; export declare function groupWorkflows(workflows: W[], rules: Array>, skipRules?: Array>, metaDataFields?: Partial>): { removed: W[]; remaining: W[]; }; /** * Checks if workflows have non-positional differences (changes to nodes or connections, * excluding position changes). * Returns true if there are meaningful changes, false if only positions changed. */ export declare function hasNonPositionalChanges(oldNodes: INode[], newNodes: INode[], oldConnections: IConnections, newConnections: IConnections): boolean; /** * Checks if any credential IDs changed between old and new workflow nodes. * Compares node by node - returns true if for any node: * - A credential was added (new credential type not in old node) * - A credential was removed (old credential type not in new node) * - A credential was changed (same credential type but different credential ID) */ export declare function hasCredentialChanges(oldNodes: INode[], newNodes: INode[]): boolean; export {}; //# sourceMappingURL=workflow-diff.d.ts.map