import type { JsonEL } from "../node/el/jsonEL"; import { Node } from "@xmldom/xmldom"; export declare enum TagType { Open = "Open", Close = "Close", Empty = "Empty", Text = "Text" } export interface LawDiffResult { mostSeriousStatus: ProblemStatus; items: Array>; oldRoot: ComparableEL; newRoot: ComparableEL; oldELs: Array<[ComparableEL, TagType]>; newELs: Array<[ComparableEL, TagType]>; } export type LawDiffResultItem = LawDiffElementMismatch | LawDiffElementChange | LawDiffNoDiff; export declare enum LawDiffType { ElementMismatch = 0, ElementChange = 1, NoDiff = 2 } export interface LawDiffElementMismatch { type: LawDiffType.ElementMismatch; mostSeriousStatus: ProblemStatus; diffTable: DiffTable; } export interface LawDiffElementChange { type: LawDiffType.ElementChange; mostSeriousStatus: ProblemStatus; diffTable: DiffTable; nochangeKeys: string[]; changedKeys: Array<[string, ProblemStatus]>; removedKeys: Array<[string, ProblemStatus]>; addedKeys: Array<[string, ProblemStatus]>; oldIndex: number; newIndex: number; } export interface LawDiffNoDiff { type: LawDiffType.NoDiff; mostSeriousStatus: ProblemStatus.NoProblem; diffTable: DiffTable; } export declare enum ProblemStatus { Error = 2, Warning = 1, NoProblem = 0 } export declare enum DiffStatus { Add = "Add", Remove = "Remove", Change = "Change", NoChange = "NoChange" } export type DiffTable = Array>; export type DiffTableRow = DiffAddRow | DiffRemoveRow | DiffChangeRow | DiffNoChangeRow; export interface DiffAddRow { status: DiffStatus.Add; oldItem: null; newItem: DiffTableItem; } export interface DiffRemoveRow { status: DiffStatus.Remove; oldItem: DiffTableItem; newItem: null; } export interface DiffChangeRow { status: DiffStatus.Change; oldItem: DiffTableItem | null; newItem: DiffTableItem | null; } export interface DiffNoChangeRow { status: DiffStatus.NoChange; oldItem: DiffTableItem; newItem: DiffTableItem; } export interface DiffTableItem { index: number; value: T; } export declare class ComparableEL implements JsonEL { tag: string; attr: { [key: string]: string | undefined; }; children: ComparableEL[]; openIndex: number; closeIndex: number; nextIndex: number; parent?: ComparableEL; textCache: string | null; constructor(el: JsonEL | string, parent?: ComparableEL, openIndex?: number); get text(): string; allList(): IterableIterator<[ComparableEL, TagType]>; getXPath(): string; } export declare enum LawDiffMode { DiffAll = "DiffAll", NoProblemAsNoDiff = "NoProblemAsNoDiff", WarningAsNoDiff = "WarningAsNoDiff" } export interface LawDiffOptions { lawDiffMode?: LawDiffMode; errorContext?: unknown; } export declare const lawDiff: (oldJson: JsonEL, newJson: JsonEL, lawDiffOptions: LawDiffOptions) => LawDiffResult; export interface LawPosition { line: number; col: number; str: string; } export type LawDiffResultItemData = LawDiffElementMismatchData | LawDiffElementChangeData | LawDiffNoDiffData; export interface LawDiffElementMismatchData { type: LawDiffType.ElementMismatch; mostSeriousStatus: ProblemStatus; diffTable: DiffTableData; } export interface LawDiffElementChangeData { type: LawDiffType.ElementChange; mostSeriousStatus: ProblemStatus; nochangeKeys: string[]; changedKeys: Array<[string, ProblemStatus]>; removedKeys: Array<[string, ProblemStatus]>; addedKeys: Array<[string, ProblemStatus]>; oldItem: DiffTableItemData; newItem: DiffTableItemData; } export interface LawDiffNoDiffData { type: LawDiffType.NoDiff; mostSeriousStatus: ProblemStatus.NoProblem; diffTable: DiffTableData; } export type DiffTableData = DiffTableRowData[]; export type DiffTableRowData = DiffAddRowData | DiffRemoveRowData | DiffChangeRowData | DiffNoChangeRowData; export interface DiffAddRowData { status: DiffStatus.Add; oldItem: null; newItem: DiffTableItemData; } export interface DiffRemoveRowData { status: DiffStatus.Remove; oldItem: DiffTableItemData; newItem: null; } export interface DiffChangeRowData { status: DiffStatus.Change; oldItem: DiffTableItemData | null; newItem: DiffTableItemData | null; } export interface DiffNoChangeRowData { status: DiffStatus.NoChange; oldItem: DiffTableItemData; newItem: DiffTableItemData; } export interface DiffTableItemData { tag: string; attr: { [key: string]: string | undefined; }; text: string; type: TagType; pos: LawPosition | null; } export declare const makeDiffData: (d: LawDiffResult, origDOM: Node, parsedDOM: Node) => LawDiffResultItemData[];