{"version":3,"file":"sedeh-differentiate.mjs","sources":["../../../projects/differentiate/src/lib/interfaces/differentiate.interfaces.ts","../../../projects/differentiate/src/lib/components/differentiate-tree.component.ts","../../../projects/differentiate/src/lib/components/differentiate-tree.component.html","../../../projects/differentiate/src/lib/components/differentiate.component.ts","../../../projects/differentiate/src/lib/components/differentiate.component.html","../../../projects/differentiate/src/public-api.ts","../../../projects/differentiate/src/sedeh-differentiate.ts"],"sourcesContent":["\r\nexport enum DifferentiateNodeType {\r\n  literal = 1,\r\n  pair = 2,\r\n  json = 3,\r\n  array = 4\r\n}\r\nexport enum DifferentiateNodeStatus {\r\n  extended = 0,\r\n  default = 1,\r\n  typeChanged = 2,\r\n  nameChanged = 3,\r\n  valueChanged = 4,\r\n  added = 5,\r\n  removed = 6\r\n}\r\nexport interface DifferentiateNode {\r\n  id: number,\r\n  counterpart?: number,\r\n  index: number,\r\n  name: string,\r\n  altName: string,\r\n  value: string,\r\n  parent: DifferentiateNodeType,\r\n  type: DifferentiateNodeType,\r\n  children: DifferentiateNode[],\r\n  status: DifferentiateNodeStatus,\r\n  isRoot?: boolean\r\n}\r\n\r\nexport interface StatisticalData {\r\n  time: Date,\r\n  changed: number,\r\n  removed: number,\r\n  added: number\r\n}\r\n\r\n","/*\r\n * A comparision tree will layout each attribute of a json deep through its heirarchy with given visual queues\r\n * that represents a deletion, adition, or change of attribute from the other tree. The status of each node is \r\n * evaluated by the parent comparision tool.\r\n */\r\nimport {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {DifferentiateNodeStatus} from '../interfaces/differentiate.interfaces';\r\n\r\n@Component({\r\n  selector: 'differentiate-tree',\r\n  standalone: true,\r\n  imports: [ CommonModule ],\r\n  templateUrl: './differentiate-tree.component.html',\r\n  styleUrls: ['./differentiate-tree.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DifferentiateTree implements OnInit{\r\n  depth!: number;\r\n\r\n  @Input(\"collapsed\")\r\n  collapsed = true;\r\n\r\n  @Input(\"expandible\")\r\n  expandible = true;\r\n\r\n  @Input(\"children\")\r\n  children!: any;\r\n\r\n  @Input(\"showLeftActionButton\")\r\n  showLeftActionButton = false;\r\n\r\n  @Input(\"showRightActionButton\")\r\n  showRightActionButton = false;\r\n\r\n  @Input(\"status\")\r\n  status = 1;\r\n\r\n  @Input(\"side\")\r\n  side = \"\";\r\n\r\n  @Input(\"level\")\r\n  level = 0;\r\n\r\n  @Input(\"objectPath\")\r\n  objectPath = \"\";\r\n\r\n  @Input(\"categorizeBy\")\r\n  categorizeBy!: string;\r\n\r\n  @Input(\"leftSideToolTip\")\r\n  leftSideToolTip = \"take left side\";\r\n\r\n  @Input(\"rightSideToolTip\")\r\n  rightSideToolTip = \"take right side\";\r\n\r\n  @Output(\"onhover\")\r\n  onhover = new EventEmitter();\r\n\r\n  @Output(\"onrevert\")\r\n  onrevert = new EventEmitter();\r\n\r\n  @Output(\"onexpand\")\r\n  onexpand = new EventEmitter();\r\n\r\n  ngOnInit() {\r\n    this.depth = this.level;\r\n  }\r\n\r\n  bubleup(event: any) {\r\n    event.side = this.side;\r\n    this.onhover.emit(event);\r\n  }\r\n\r\n  keyup(event: any) {\r\n    const code = event.which;\r\n    if (code === 13) {\r\n      event.target.click();\r\n\t\t}\r\n  }\r\n\r\n  changCounter() {\r\n    let count = 0;\r\n    this.children.map( (item: any) => {\r\n      if(item.status !== DifferentiateNodeStatus.default) {\r\n        count++;\r\n      }\r\n    })\r\n    return count;\r\n  }\r\n  childStatus(status: any) {\r\n    let text = '';\r\n    switch(status) {\r\n      case DifferentiateNodeStatus.extended: text = 'Modified in different location'; break;\r\n      case DifferentiateNodeStatus.typeChanged: text = 'Type Changed'; break;\r\n      case DifferentiateNodeStatus.nameChanged: text = 'Name Changed'; break;\r\n      case DifferentiateNodeStatus.valueChanged: text = 'Value Changed'; break;\r\n      case DifferentiateNodeStatus.added: text = 'Added'; break;\r\n      case DifferentiateNodeStatus.removed: text = 'Removed'; break;\r\n      default: break\r\n    }\r\n    return text;\r\n  }\r\n  expand(event: any) {\r\n    this.onexpand.emit( this.objectPath );\r\n  }\r\n  autoExpand(event: any) {\r\n    this.onexpand.emit(event);\r\n  }\r\n  advanceToRightSide(child: any) {\r\n    child.path = this.objectPath + (this.objectPath.length ? ',':'') + child.index;\r\n    this.onrevert.emit({type:\"advance\", node: child});\r\n  }\r\n  advanceToLeftSide(child: any) {\r\n    child.path = this.objectPath + (this.objectPath.length ? ',':'') + child.index;\r\n    this.onrevert.emit({type:\"revert\", node: child});\r\n  }\r\n  advance(event: any) {\r\n    // bubble up the undo event.\r\n    this.onrevert.emit(event);\r\n  }\r\n\r\n  mouseOvered(event: any, flag: boolean, i: number) {\r\n    event.preventDefault();\r\n\r\n    if (this.depth === 2) {\r\n      event.stopPropagation();\r\n      \r\n      this.onhover.emit({\r\n        hover: flag,\r\n        index: i,\r\n        path: this.objectPath\r\n      });\r\n    }\r\n  }\r\n}\r\n","<div *ngIf=\"categorizeBy && expandible\" \r\n  class=\"diff-heading\" \r\n  (click)=\"expand($event)\">\r\n  <span class=\"arrow\" *ngIf=\"collapsed\">&#9658;</span>\r\n  <span class=\"arrow\" *ngIf=\"!collapsed\">&#9660;</span>\r\n  <span [textContent]=\"categorizeBy\"></span>\r\n  <span class=\"counter\" [textContent]=\"changCounter()\"></span>\r\n</div>\r\n<ul \r\n  [class]=\"side\" \r\n  [class.child]=\"depth ===2 || (categorizeBy && categorizeBy.length)\" \r\n  [class.collapsed]=\"expandible && categorizeBy && collapsed\">\r\n  <li  *ngFor=\"let child of children\" \r\n    (mouseout)=\"depth === 2 ? mouseOvered($event, false, child.index) : null\"\r\n    (mouseover)=\"depth === 2 ? mouseOvered($event, true, child.index) : null\"\r\n    [class.hover]=\"child.hover\"\r\n    [class.extended]=\"child.status === 0\" \r\n    [class.added]=\"child.status === 5\" \r\n    [class.removed]=\"child.status === 6\" \r\n    [class.type-changed]=\"child.status === 2\" \r\n    [class.name-changed]=\"child.status === 3\" \r\n    [class.value-changed]=\"child.status === 4\">\r\n    <div \r\n      class='tree-node' \r\n      [ngClass]=\"'depth-' + depth\" \r\n      [class.left-action]=\"showLeftActionButton\"\r\n      [class.right-action]=\"showRightActionButton\" \r\n      [class.collapsed]=\"child.collapsed\" \r\n      [id] = \"child.id\">\r\n      <span [title]=\"rightSideToolTip\"\r\n        class=\"do\" \r\n        tabindex=\"0\"\r\n        aria-hidden=\"true\"\r\n        (keyup)=\"keyup($event)\"\r\n        (click)=\"advanceToRightSide(child)\"\r\n        *ngIf=\"showLeftActionButton && status !== child.status && child.status > 1\">&#9100;</span>\r\n      <span [title]=\"childStatus(child.status)\" class=\"title\">\r\n        <span *ngIf='child.name && child.name !== null'\r\n          class='name' \r\n          [innerHTML]=\"child.name.length ? child.name : '&nbsp;'\">\r\n        </span>\r\n        <span *ngIf='child.value !== undefined && child.value !== null'\r\n          class='value' \r\n          [class.string]=\"depth > 0 && child.value && child.value.length\"\r\n          [innerHTML]=\"child.value !== undefined  ? ''+child.value : '&nbsp;'\">\r\n        </span>\r\n      </span>\r\n      <span [title]=\"leftSideToolTip\"\r\n        class=\"undo\" \r\n        tabindex=\"0\"\r\n        aria-hidden=\"true\"\r\n        (keyup)=\"keyup($event)\"\r\n        (click)=\"advanceToLeftSide(child)\"\r\n        *ngIf=\"showRightActionButton && status !== child.status && child.status > 1\">&#9100;</span>\r\n    </div>\r\n    <differentiate-tree *ngIf=\"child.children.length\" \r\n        [level]=\"depth+1\" \r\n        [status]=\"child.status\" \r\n        [expandible]=\"expandible\"\r\n        [collapsed]=\"child.collapsed\"\r\n        [categorizeBy]=\"child.categorizeBy\"\r\n        [showLeftActionButton]=\"showLeftActionButton\" \r\n        [leftSideToolTip]=\"leftSideToolTip\"\r\n        [showRightActionButton]=\"showRightActionButton\" \r\n        [rightSideToolTip]=\"rightSideToolTip\"\r\n        [objectPath]=\"objectPath + (objectPath.length ? ',':'') + child.index\"\r\n        (onhover)=\"bubleup($event)\"\r\n        (onrevert)=\"advance($event)\"\r\n        (onexpand)=\"autoExpand($event)\"\r\n        [class.child-node]=\"child.parent !== 4\" \r\n        [children]='child.children'></differentiate-tree>\r\n    <div *ngIf=\"child.status > 2\" class=\"upper\" [class.collapsed]=\"child.collapsed\" [ngClass]=\"'depth-' + depth\" ></div>\r\n    <div *ngIf=\"child.status > 2\" class=\"lower\" [class.collapsed]=\"child.collapsed\" [ngClass]=\"'depth-' + depth\" ></div>\r\n  </li>\r\n</ul>\r\n\r\n","/*\r\n * Comparision Tool will layout two comparision trees side by side and feed them an internal object\r\n * heirarchy created for internal use from JSON objects given to this component.\r\n */\r\nimport {\r\n  Component,\r\n  OnInit,\r\n  OnChanges,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DifferentiateTree } from './differentiate-tree.component'\r\n\r\nimport {\r\n  DifferentiateNode,\r\n  DifferentiateNodeType,\r\n  DifferentiateNodeStatus,\r\n  StatisticalData\r\n} from '../interfaces/differentiate.interfaces';\r\n\r\n@Component({\r\n  selector: 'differentiate',\r\n  standalone: true,\r\n  imports: [ CommonModule, DifferentiateTree ],\r\n  templateUrl: './differentiate.component.html',\r\n  styleUrls: ['./differentiate.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DifferentiateComponent implements OnInit, OnChanges {\r\n  \r\n  leftSide: any = [];\r\n  rightSide: any = [];\r\n  categorizeBy!: string[] | undefined;\r\n\r\n  @Input(\"allowRevert\")\r\n  allowRevert = false;\r\n\r\n  @Input(\"caseSensitive\")\r\n  caseSensitive = false;\r\n\r\n  @Input(\"expandible\")\r\n  expandible = true;\r\n\r\n  @Input(\"allowAdvance\")\r\n  allowAdvance = false;\r\n\r\n  @Input(\"attributeOrderIsImportant\")\r\n  attributeOrderIsImportant = true;\r\n\r\n  @Input(\"onlyShowDifferences\")\r\n  onlyShowDifferences = false;\r\n\r\n  @Input(\"leftSideObject\")\r\n  leftSideObject: any\r\n\r\n  @Input(\"rightSideObject\")\r\n  rightSideObject: any;\r\n\r\n  @Input(\"leftSideToolTip\")\r\n  leftSideToolTip = \"take left side\";\r\n\r\n  @Input(\"rightSideToolTip\")\r\n  rightSideToolTip = \"take right side\";\r\n\r\n  @Input('namedRootObject')\r\n  set namedRootObject(value: string) {\r\n    let x = value.replace(\" \", \"\");\r\n\r\n    if (x.length) {\r\n      this.categorizeBy = value.split(\",\");\r\n    } else {\r\n      this.categorizeBy = undefined;\r\n    }\r\n  }\r\n\r\n  @Output(\"onrevert\")\r\n  onrevert = new EventEmitter();\r\n\r\n  @Output(\"onadvance\")\r\n  onadvance = new EventEmitter();\r\n\r\n  @Output(\"ondifference\")\r\n  ondifference = new EventEmitter<StatisticalData>();\r\n\r\n  constructor(\t) {\r\n\t  \r\n  }\r\n  private generateNodeId() {\r\n    const min = 1;\r\n    const max = 10000\r\n    return Math.floor(Math.random() * (max - min + 1)) + min;\r\n  }\r\n  private transformNodeToOriginalStructure(node: any, parent: any) {\r\n    let json: any = {};\r\n    let array: any[] = [];\r\n\r\n    node.map( (item: DifferentiateNode) => {\r\n      if (item.status !== DifferentiateNodeStatus.removed) {\r\n        if (parent === DifferentiateNodeType.json) {    \r\n          if (item.type === DifferentiateNodeType.literal) {\r\n            array.push(item.value);\r\n          } else if (item.type === DifferentiateNodeType.pair) {\r\n            json[item.name] = item.value;\r\n          } else if (item.type === DifferentiateNodeType.array) {\r\n            const x = this.transformNodeToOriginalStructure(item.children, item.parent);\r\n            if (item.name.length) {\r\n              json[item.name] = x;\r\n            } else if (typeof x === 'object') {\r\n              json = x;\r\n            } else {\r\n              json = [x];\r\n            }\r\n          } else if (item.type === DifferentiateNodeType.json) {\r\n            json[item.name] = this.transformNodeToOriginalStructure(item.children, item.parent);\r\n          }\r\n        } else if (parent === DifferentiateNodeType.array){\r\n          if (item.type === DifferentiateNodeType.literal) {\r\n            array.push(item.value);\r\n          } else if (item.type === DifferentiateNodeType.json) {\r\n            array.push(this.transformNodeToOriginalStructure(item, item.parent));\r\n          } else if (item.type === DifferentiateNodeType.array) {\r\n            array.push(this.transformNodeToOriginalStructure(item.children, item.parent));\r\n          }\r\n        }\r\n      }\r\n    });\r\n    return array.length ? array : json;\r\n  }\r\n  private transformNodeToInternalStruction(node: any) {\r\n    let result = node;\r\n    if (node instanceof Array) {\r\n      const children: DifferentiateNode[] = [];\r\n      const p = DifferentiateNodeType.array;\r\n      node.map( (item, i) => {\r\n        const jsonValue: any = this.transformNodeToInternalStruction(item);\r\n        if (jsonValue instanceof Array) {\r\n          if (!this.attributeOrderIsImportant) {\r\n            jsonValue.sort((a,b) => {return a.name <= b.name ? -1: 1});\r\n            jsonValue.map( (x: DifferentiateNode, i) =>{\r\n              x.index = i;\r\n              x.altName = \"\" + i;\r\n            });\r\n          }\r\n          children.push({\r\n            id: this.generateNodeId(),\r\n            index: i,\r\n            name: \"\",\r\n            altName: \"\" + i,\r\n            value: \"\",\r\n            parent: p,\r\n            type: DifferentiateNodeType.array,\r\n            status: DifferentiateNodeStatus.default,\r\n            children: jsonValue\r\n          });\r\n        } else {\r\n          children.push({\r\n            id: this.generateNodeId(),\r\n            index: i,\r\n            name: \"\",\r\n            altName: \"\" + i,\r\n            value: String(jsonValue),\r\n            parent: p,\r\n            type: DifferentiateNodeType.literal,\r\n            status: DifferentiateNodeStatus.default,\r\n            children: []\r\n          });\r\n        }      \r\n      });\r\n      result = children;\r\n    } else if (node instanceof Object) {\r\n      const list = Object.keys(node);\r\n      const children: DifferentiateNode[] = [];\r\n      const p = DifferentiateNodeType.json;\r\n      if (!this.attributeOrderIsImportant) {\r\n        list.sort((a,b) => {return a <= b ? -1: 1});\r\n      }\r\n      list.map( (item, i) => {\r\n        const jsonValue: any = this.transformNodeToInternalStruction(node[item]);\r\n        if (jsonValue instanceof Array) {\r\n          if (!this.attributeOrderIsImportant) {\r\n            jsonValue.sort((a,b) => {return a.name <= b.name ? -1: 1});\r\n            jsonValue.map( (x: DifferentiateNode, i) => {\r\n              x.index = i;\r\n              x.altName = \"\" + i;\r\n            });\r\n          }\r\n          children.push({\r\n            id: this.generateNodeId(),\r\n            index: i,\r\n            name: item,\r\n            altName: \"\" + i,\r\n            value: \"\",\r\n            parent: p,\r\n            type: DifferentiateNodeType.json,\r\n            status: DifferentiateNodeStatus.default,\r\n            children: jsonValue\r\n          });\r\n        } else {\r\n          children.push({\r\n            id: this.generateNodeId(),\r\n            index: i,\r\n            name: item,\r\n            altName: \"\" + i,\r\n            value: jsonValue,\r\n            parent: p,\r\n            type: DifferentiateNodeType.pair,\r\n            status: DifferentiateNodeStatus.default,\r\n            children: []\r\n          });\r\n        }\r\n      });\r\n      result = children;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private itemInArray(side: DifferentiateNode[], node: DifferentiateNode) {\r\n    let result!: DifferentiateNode;\r\n    let key = node.type === DifferentiateNodeType.literal ?\r\n                (node.value ? String(node.value) : \"\") :\r\n                node.type === DifferentiateNodeType.array ?\r\n                node.altName :\r\n                node.name;\r\n\r\n    key = this.caseSensitive ? key : key.toUpperCase();\r\n    side?.map( (item: DifferentiateNode) => {\r\n      if (item.type === DifferentiateNodeType.literal) {\r\n        const value = item.value ? (this.caseSensitive ? String(item.value) : String(item.value).toUpperCase()) : '';\r\n        if (value === key) {\r\n          result = item;\r\n        }  \r\n      } else if (item.type === DifferentiateNodeType.array) {\r\n        if (item.altName === key) {\r\n          result = item;\r\n        }  \r\n      } else {\r\n        if (item.name === key) {\r\n          result = item;\r\n        }\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  private leftItemFromRightItem(leftNode: DifferentiateNode, rightNode: DifferentiateNode) {\r\n    let result!: DifferentiateNode;\r\n    if (!leftNode || !rightNode) {\r\n      return result;\r\n    }\r\n    let key = rightNode.type === DifferentiateNodeType.literal ?\r\n                    (rightNode.value ? rightNode.value : \"\") :\r\n                    rightNode.type === DifferentiateNodeType.array ?\r\n                    rightNode.altName :\r\n                    rightNode.name;\r\n\r\n    key = this.caseSensitive ? key : key.toUpperCase();\r\n    if (leftNode.type === DifferentiateNodeType.literal) {\r\n      const value = leftNode.value ? (this.caseSensitive ? String(leftNode.value) : String(leftNode.value).toUpperCase()) : '';\r\n      if (value === key) {\r\n        result = leftNode;\r\n      }  \r\n    } else if (leftNode.type === DifferentiateNodeType.array) {\r\n      if (leftNode.altName === key) {\r\n        result = leftNode;\r\n      }  \r\n    } else {\r\n      if (leftNode.name === key) {\r\n        result = leftNode;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private compare(leftNode: DifferentiateNode, rightNode: DifferentiateNode) {\r\n    if (leftNode.type !== rightNode.type) {\r\n      leftNode.status = DifferentiateNodeStatus.typeChanged;\r\n      rightNode.status = DifferentiateNodeStatus.typeChanged;\r\n      leftNode.counterpart = rightNode.id;\r\n      rightNode.counterpart = leftNode.id;\r\n    } else if (leftNode.type === DifferentiateNodeType.literal) {\r\n      if (leftNode.value !== rightNode.value) {\r\n        leftNode.status = DifferentiateNodeStatus.valueChanged;\r\n        rightNode.status = DifferentiateNodeStatus.valueChanged;\r\n        leftNode.counterpart = rightNode.id;\r\n        rightNode.counterpart = leftNode.id;\r\n      }\r\n    } else if (leftNode.type === DifferentiateNodeType.pair) {\r\n      if (leftNode.name !== rightNode.name) {\r\n        leftNode.status = DifferentiateNodeStatus.nameChanged;\r\n        rightNode.status = DifferentiateNodeStatus.nameChanged;\r\n        leftNode.counterpart = rightNode.id;\r\n        rightNode.counterpart = leftNode.id;\r\n      }\r\n      if (leftNode.value !== rightNode.value) {\r\n        leftNode.status = DifferentiateNodeStatus.valueChanged;\r\n        rightNode.status = DifferentiateNodeStatus.valueChanged;\r\n        leftNode.counterpart = rightNode.id;\r\n        rightNode.counterpart = leftNode.id;\r\n      }\r\n    } else {\r\n      if (leftNode.name !== rightNode.name) {\r\n        leftNode.status = DifferentiateNodeStatus.nameChanged;\r\n        rightNode.status = DifferentiateNodeStatus.nameChanged;\r\n        leftNode.counterpart = rightNode.id;\r\n        rightNode.counterpart = leftNode.id;\r\n      }\r\n      this.unify(leftNode.children, rightNode.children);\r\n    }\r\n  }\r\n  private reIndex(list: DifferentiateNode[]) {\r\n    list.map((item, i) => {\r\n      item.index = i;\r\n      this.reIndex(item.children);\r\n    });\r\n  }\r\n  private copyInto(\r\n              side: DifferentiateNode[],\r\n              item: DifferentiateNode,\r\n              index: number,\r\n              status: DifferentiateNodeStatus) {\r\n    \r\n    if (item) {\r\n      const newItem = JSON.parse(JSON.stringify(item));\r\n      side.splice(index, 0, newItem);\r\n      this.reIndex(side);\r\n  \r\n      item.status = status;\r\n      newItem.status = status;\r\n      item.counterpart = newItem.id;\r\n      newItem.counterpart = item.id;\r\n      this.setChildrenStatus(item.children, status)\r\n      this.setChildrenStatus(newItem.children, status)\r\n    }\r\n  }\r\n  private setChildrenStatus(list: any[], status: any){\r\n    list.map( (x) => {\r\n      x.status = status;\r\n      this.setChildrenStatus(x.children, status)\r\n    });\r\n  }\r\n  private unify(leftSide: DifferentiateNode[], rightSide: DifferentiateNode[]) {\r\n    let i = 0, j = 0, looping = true;\r\n\r\n    while (looping) {\r\n      let leftItemInRightSide: DifferentiateNode | undefined = i < leftSide.length ? this.itemInArray(rightSide, leftSide[i]) : undefined;\r\n      let rightItemInLeftSide: DifferentiateNode | undefined = j < rightSide.length ? this.itemInArray(leftSide, rightSide[j]) : undefined;\r\n\r\n      if (!leftItemInRightSide && i < leftSide.length) {\r\n        if (!rightSide.length) {\r\n          while (i < leftSide.length) {\r\n            this.copyInto(rightSide, leftSide[i], i, DifferentiateNodeStatus.added);\r\n            j++;i++;\r\n          }\r\n        } else {\r\n          const v = leftSide[i].value;\r\n          const c = leftSide[i].children?.length;\r\n          const status = v || c ? DifferentiateNodeStatus.added : DifferentiateNodeStatus.extended;\r\n          this.copyInto(rightSide, leftSide[i], i, status);\r\n          j++;i++;\r\n        }\r\n      }\r\n      if (!rightItemInLeftSide && j < rightSide.length) {\r\n        if (!leftSide.length) {\r\n          while (j < rightSide.length) {\r\n            this.copyInto(leftSide, rightSide[j], j, DifferentiateNodeStatus.removed);\r\n            j++;i++;\r\n          }\r\n        } else {\r\n          const v = rightSide[j].value;\r\n          const c = rightSide[j].children?.length;\r\n          const status = v || c ? DifferentiateNodeStatus.removed : DifferentiateNodeStatus.extended;\r\n          this.copyInto(leftSide, rightSide[j], j, status);\r\n          j++;i++;\r\n        }\r\n      }\r\n      if (!leftItemInRightSide) {\r\n        leftItemInRightSide = j < rightSide.length ? rightSide[j] : undefined;\r\n      }\r\n      if (!rightItemInLeftSide) {\r\n        rightItemInLeftSide = i < leftSide.length ? leftSide[i] : undefined;\r\n      }\r\n      if (leftItemInRightSide && leftItemInRightSide.index !== i) {\r\n        while (i < leftSide.length) {\r\n          leftItemInRightSide = this.leftItemFromRightItem(rightSide[i], leftSide[i]);\r\n          if (leftItemInRightSide) {\r\n            leftItemInRightSide = j < rightSide.length ? rightSide[j] : undefined;\r\n            break;\r\n          } else {\r\n            this.copyInto(rightSide, leftSide[i], i, DifferentiateNodeStatus.added);\r\n            j++;i++;\r\n          }\r\n        }  \r\n      }\r\n      if (rightItemInLeftSide && rightItemInLeftSide.index !== j) {\r\n        while (j < rightSide.length) {\r\n          rightItemInLeftSide = this.leftItemFromRightItem(leftSide[j], rightSide[j]);\r\n          if (rightItemInLeftSide) {\r\n            rightItemInLeftSide = i < leftSide.length ? leftSide[i] : undefined;\r\n            break;\r\n          } else {\r\n            this.copyInto(leftSide, rightSide[j], j, DifferentiateNodeStatus.removed);\r\n            j++;i++;\r\n          }\r\n        }\r\n      }\r\n      if (leftItemInRightSide && i < leftSide.length) {\r\n        let x = this.itemInArray(rightSide, leftSide[i]);\r\n        if (x && x.index !== leftItemInRightSide.index) {\r\n          this.copyInto(leftSide, rightSide[j], j, DifferentiateNodeStatus.removed);\r\n          j++;i++;\r\n          leftItemInRightSide = j < rightSide.length ? rightSide[j] : undefined;\r\n        }\r\n      }\r\n      if (rightItemInLeftSide && j < rightSide.length) {\r\n        let x = this.itemInArray(leftSide, rightSide[j]);\r\n        if (x && x.index !== rightItemInLeftSide.index) {\r\n          this.copyInto(rightSide, leftSide[i], i, DifferentiateNodeStatus.added);\r\n          j++;i++;\r\n          rightItemInLeftSide = i < leftSide.length ? leftSide[i] : undefined;\r\n        }\r\n      }\r\n      if (leftItemInRightSide && rightItemInLeftSide) {\r\n        if (leftItemInRightSide.parent !== rightItemInLeftSide.parent) {\r\n          this.copyInto(leftSide, rightSide[j], j, DifferentiateNodeStatus.removed);\r\n          this.copyInto(rightSide, leftSide[i], i, DifferentiateNodeStatus.added);\r\n        } else {\r\n          this.compare(leftItemInRightSide, rightItemInLeftSide);\r\n        }\r\n        j++;i++;\r\n      }\r\n      looping = (i < leftSide.length || j < rightSide.length);\r\n    }\r\n  }\r\n  private toInternalStruction(leftNode: any, rightNode: any) {\r\n    const result = {\r\n      leftSide: this.transformNodeToInternalStruction(leftNode),\r\n      rightSide: this.transformNodeToInternalStruction(rightNode)\r\n    };\r\n    this.unify(result.leftSide, result.rightSide);\r\n\r\n    if (this.onlyShowDifferences) {\r\n      result.leftSide = this.filterUnchanged(result.leftSide);\r\n      result.rightSide = this.filterUnchanged(result.rightSide);\r\n    }\r\n  \r\n    return result;\r\n  }\r\n  private filterUnchanged(list: DifferentiateNode[]) {\r\n    const result: any[] = [];\r\n    \r\n    list.map( (item) => {\r\n      item.children = this.filterUnchanged(item.children);\r\n      if ((item.type > DifferentiateNodeType.pair && item.children.length) ||\r\n          item.status !== DifferentiateNodeStatus.default) {\r\n        result.push(item);\r\n      }\r\n    });\r\n    result.map( (x: DifferentiateNode, i) => {\r\n      x.index = i;\r\n      x.altName = \"\" + i;\r\n    });\r\n    return result;\r\n  }\r\n\r\n  ngOnChanges(changes: any) {\r\n    if (changes.attributeOrderIsImportant ||\r\n      changes.onlyShowDifferences ||\r\n      (changes.caseSensitive !== undefined) ||\r\n      changes.expandible ||\r\n      changes.leftSideObject ||\r\n      changes.namedRootObject ||\r\n      changes.rightSideObject) {\r\n      this.init();\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.init();\r\n  }\r\n  private categorizedName(item: any) {\r\n    let name = \"\";\r\n    this.categorizeBy?.map((category) => {\r\n      if (item.name === category) {\r\n        name += String(item.value) + ' ';\r\n      }\r\n    });\r\n    return name;\r\n  }\r\n  private sideCategorizedName(side: any) {\r\n    side.map( (item: any) => {\r\n      const names: any[] = [];\r\n      item.children.map((child: any) => {\r\n        const name = String(this.categorizedName(child));\r\n        if(name.length) {\r\n          names.push(name);\r\n        }\r\n      });\r\n      item.categorizeBy = names.length > 1 ? names.join(\" - \") : names[0];\r\n      item.collapsed = true;\r\n    });\r\n  }\r\n  private init() {\r\n    if (this.leftSideObject || this.rightSideObject) {\r\n      const left = (this.leftSideObject instanceof Array)  ? this.leftSideObject : [this.leftSideObject]\r\n      const right = (this.rightSideObject instanceof Array)  ? this.rightSideObject : [this.rightSideObject]\r\n      const comparision = this.toInternalStruction(left, right);\r\n      if (this.categorizeBy) {\r\n        this.sideCategorizedName(comparision.leftSide);\r\n        this.sideCategorizedName(comparision.rightSide);\r\n      }  \r\n      this.leftSide = [{\r\n        id: this.generateNodeId(),\r\n        name: \"\",\r\n        value: \"Root\",\r\n        index: 0,\r\n        parent: DifferentiateNodeType.array,\r\n        type: DifferentiateNodeType.array,\r\n        expanded: true,\r\n        isRoot: true,\r\n        children: comparision.leftSide\r\n      }];\r\n      this.rightSide= [{\r\n        id: this.generateNodeId(),\r\n        name: \"\",\r\n        value: \"Root\",\r\n        index: 0,\r\n        parent: DifferentiateNodeType.array,\r\n        type: DifferentiateNodeType.array,\r\n        expanded: true,\r\n        isRoot: true,\r\n        children: comparision.rightSide\r\n      }];\r\n      this.fireCountDifference();\r\n    }\r\n  }\r\n  private fireCountDifference() {\r\n    let diff: StatisticalData = {\r\n      time: new Date(),\r\n      changed: 0,\r\n      removed: 0,\r\n      added: 0\r\n    };\r\n\r\n    if (this.leftSide.length && this.leftSide[0].children) {\r\n      this.leftSide[0].children.map( (listItem: any) => {\r\n        listItem.children.map( (item: any) => {\r\n          switch (item.status) {\r\n            case DifferentiateNodeStatus.added: diff.added++; break;\r\n            case DifferentiateNodeStatus.removed: diff.removed++; break;\r\n            case DifferentiateNodeStatus.default: break;\r\n            default: diff.changed++; break;\r\n          }\r\n        });\r\n      })\r\n    }\r\n    this.ondifference.emit(diff);\r\n  }\r\n  private lookupChildOf(side: any, parentObject: any, id: any) {\r\n    let foundItem: any = undefined;\r\n    if (side.id === id) {\r\n      foundItem = {parent: parentObject, node: side};\r\n    } else if (side.children.length) {\r\n      side.children.map( (item: any) => {\r\n        if (!foundItem) {\r\n          foundItem = this.lookupChildOf(item, undefined, id);\r\n          if (foundItem && foundItem.parent === undefined) {\r\n            foundItem.parent = side;\r\n          } else if (item.id === id) {\r\n            foundItem = {parent: side, node: item};\r\n          }\r\n        }\r\n      });\r\n    } \r\n    return foundItem;\r\n  }\r\n  private performAdvanceToRight(leftSideInfo: any, rightSideInfo: any, status: any, i: number) {\r\n    const modifiedChildren = this.leftSide[0].children[i].children;\r\n    if (status === DifferentiateNodeStatus.removed) {\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.added) {\r\n      leftSideInfo.parent.children.splice(leftSideInfo.node.index, 1);\r\n      rightSideInfo.parent.children.splice(rightSideInfo.node.index, 1);\r\n      this.reIndex(leftSideInfo.parent.children);\r\n      this.reIndex(rightSideInfo.parent.children);\r\n    } else if (status === DifferentiateNodeStatus.nameChanged) {\r\n      leftSideInfo.node.name = rightSideInfo.node.name;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.valueChanged) {\r\n      rightSideInfo.node.value = leftSideInfo.node.value;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.typeChanged) {\r\n      leftSideInfo.node.type = rightSideInfo.node.type;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      leftSideInfo.node.children = rightSideInfo.node.children;\r\n    }\r\n    setTimeout(() =>{\r\n      this.onadvance.emit({\r\n        index: i,\r\n        type: 'Reverted',\r\n        time: new Date(),\r\n        node: this.transformNodeToOriginalStructure(modifiedChildren, DifferentiateNodeType.json)\r\n      });\r\n      this.fireCountDifference();\r\n    }, 66);\r\n  }\r\n  private performAdvanceToLeft(leftSideInfo: any, rightSideInfo: any, status: any, i: number) {\r\n    const modifiedChildren = this.rightSide[0].children[i].children;\r\n    if (status === DifferentiateNodeStatus.added) {\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.removed) {\r\n      leftSideInfo.parent.children.splice(leftSideInfo.node.index, 1);\r\n      rightSideInfo.parent.children.splice(rightSideInfo.node.index, 1);\r\n      this.reIndex(leftSideInfo.parent.children);\r\n      this.reIndex(rightSideInfo.parent.children);\r\n    } else if (status === DifferentiateNodeStatus.nameChanged) {\r\n      rightSideInfo.node.name = leftSideInfo.node.name;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.valueChanged) {\r\n      leftSideInfo.node.value = rightSideInfo.node.value;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      this.setChildrenStatus(rightSideInfo.node.children, rightSideInfo.node.status)\r\n    } else if (status === DifferentiateNodeStatus.typeChanged) {\r\n      rightSideInfo.node.type = leftSideInfo.node.type;\r\n      rightSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      leftSideInfo.node.status = DifferentiateNodeStatus.default;\r\n      this.setChildrenStatus(leftSideInfo.node.children, leftSideInfo.node.status)\r\n      rightSideInfo.node.children = leftSideInfo.node.children;\r\n    }\r\n    setTimeout(() =>{\r\n      this.onrevert.emit({\r\n        index: i,\r\n        type: 'Advanced',\r\n        time: new Date(),\r\n        node: this.transformNodeToOriginalStructure(modifiedChildren, DifferentiateNodeType.json)\r\n      });\r\n      this.fireCountDifference();\r\n    }, 66);\r\n  }\r\n  advance(event: any) {\r\n    const index = parseInt(event.node.path.split(\",\")[1]);\r\n\r\n    if (event.type === 'advance') {\r\n      this.performAdvanceToLeft(\r\n        this.lookupChildOf(this.leftSide[0].children[index], this.leftSide[0], event.node.id), \r\n        this.lookupChildOf(this.rightSide[0].children[index], this.rightSide[0], event.node.counterpart), \r\n        event.node.status, index);\r\n    } else {\r\n      this.performAdvanceToRight(\r\n        this.lookupChildOf(this.leftSide[0].children[index], this.leftSide[0], event.node.counterpart), \r\n        this.lookupChildOf(this.rightSide[0].children[index], this.rightSide[0], event.node.id), \r\n        event.node.status, index);\r\n    }\r\n  }\r\n  autoExpand(event: any) {\r\n    const index = parseInt(event.split(\",\")[1]);\r\n    const lc = this.rightSide[0].children[index];\r\n    const rc = this.leftSide[0].children[index];\r\n    \r\n    lc.collapsed = !lc.collapsed;\r\n    rc.collapsed = !rc.collapsed;\r\n  }\r\n  onhover(event: any) {\r\n    const index = parseInt(event.path.split(\",\")[1]);\r\n    if (this.rightSide.length && this.rightSide[0].children && this.rightSide[0].children[index] && this.rightSide[0].children[index].children) {\r\n      this.rightSide[0].children[index].children[event.index].hover = event.hover;\r\n    }\r\n    if (this.leftSide.length && this.leftSide[0].children && this.leftSide[0].children[index] && this.leftSide[0].children[index].children) {\r\n        this.leftSide[0].children[index].children[event.index].hover = event.hover;\r\n    }\r\n  }\r\n}\r\n","<differentiate-tree \r\n    *ngIf=\"leftSide && rightSide\"\r\n    class=\"root\" \r\n    [level]=\"0\" \r\n    side=\"left-side\" \r\n    (onexpand)=\"autoExpand($event)\"\r\n    (onhover)=\"onhover($event)\"\r\n    (onrevert)=\"advance($event)\"\r\n    [expandible]=\"expandible\"\r\n    [rightSideToolTip]=\"rightSideToolTip\"\r\n    [showLeftActionButton]=\"allowAdvance\" \r\n    [children]=\"leftSide\"></differentiate-tree>\r\n<differentiate-tree \r\n    *ngIf=\"leftSide && rightSide\"\r\n    class=\"root\" \r\n    [level]=\"0\" \r\n    side=\"right-side\" \r\n    (onexpand)=\"autoExpand($event)\"\r\n    (onhover)=\"onhover($event)\"\r\n    (onrevert)=\"advance($event)\"\r\n    [expandible]=\"expandible\"\r\n    [leftSideToolTip]=\"leftSideToolTip\"\r\n    [showRightActionButton]=\"allowRevert\" \r\n    [children]=\"rightSide\"></differentiate-tree>\r\n\r\n","/*\n * Public API Surface of differentiate\n */\n\nexport * from './lib/interfaces/differentiate.interfaces';\nexport * from './lib/components/differentiate.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}