{"version":3,"file":"mcarey1590-ngx-diff2html.mjs","sources":["../../../projects/ngx-diff2html/src/lib/ngx-diff2html.service.ts","../../../projects/ngx-diff2html/src/pipes/safe.pipe.ts","../../../projects/ngx-diff2html/src/lib/ngx-diff2html.component.ts","../../../projects/ngx-diff2html/src/lib/ngx-diff2html.module.ts","../../../projects/ngx-diff2html/src/public-api.ts","../../../projects/ngx-diff2html/src/mcarey1590-ngx-diff2html.ts"],"sourcesContent":["import * as Diff2Html from \"diff2html\";\n\nimport { DiffFormat, DiffStyle } from \"./ngx-diff2html.model\";\n\nimport { Injectable } from \"@angular/core\";\nimport { diff_match_patch } from \"diff-match-patch\";\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class NgxDiff2htmlService {\n  constructor() {}\n\n  getDiff(text1: string, text2: string, filename: string = \"\") {\n    // Get diff\n    const dmp = new diff_match_patch();\n    const chars = dmp.diff_linesToChars_(text1, text2);\n    const lineText1 = chars.chars1;\n    const lineText2 = chars.chars2;\n    const lineArray = chars.lineArray;\n    const diffs = dmp.diff_main(lineText1, lineText2, false);\n    dmp.diff_charsToLines_(diffs, lineArray);\n    const patchMake = dmp.patch_make(text1, diffs);\n    const patchToText = dmp.patch_toText(patchMake);\n    // console.info(patchToText);\n\n    // Make it look more like a unified diff style\n    // ToDo: find a non tricky way to do this\n    let lines = patchToText.split(\"\\n\");\n    lines.forEach((line: string, index: number) => {\n      if (line.startsWith(\"-\")) {\n        lines[index] = line.replace(/%0A(.)/g, \"%0A-$1\");\n      } else if (line.startsWith(\"+\")) {\n        lines[index] = line.replace(/%0A(.)/g, \"%0A+$1\");\n      }\n    });\n    const unifiedDiff = lines.join(\"\\n\");\n    // console.info(unifiedDiff);\n\n    const strInput =\n      \"--- \" + filename + \" \\n+++ \" + filename + \" \\n\" + unifiedDiff;\n    const diff = decodeURIComponent(strInput);\n    // console.info(diff);\n\n    // Return diff\n    return diff;\n  }\n\n  diffToHTML(\n    diff: string,\n    format: DiffFormat = \"line-by-line\",\n    style: DiffStyle = \"word\"\n  ) {\n    return Diff2Html.html(diff, {\n      drawFileList: false,\n      matching: \"lines\",\n      outputFormat: format,\n      diffStyle: style,\n    });\n  }\n}\n","import {\n  DomSanitizer,\n  SafeHtml,\n  SafeResourceUrl,\n  SafeScript,\n  SafeStyle,\n  SafeUrl,\n} from \"@angular/platform-browser\";\n/**\n * Stolen from: https://github.com/embarq/safe-pipe/blob/master/projects/safe-pipe/src/lib/safe-pipe.pipe.ts\n */\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\nexport type SafePipeType = \"html\" | \"style\" | \"script\" | \"url\" | \"resourceUrl\";\n\n@Pipe({\n  name: \"safe\",\n  pure: true,\n})\nexport class SafePipe implements PipeTransform {\n  constructor(protected sanitizer: DomSanitizer) {}\n\n  public transform(\n    value: string,\n    type: SafePipeType\n  ): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {\n    switch (type) {\n      case \"html\":\n        return this.sanitizer.bypassSecurityTrustHtml(value);\n      case \"style\":\n        return this.sanitizer.bypassSecurityTrustStyle(value);\n      case \"script\":\n        return this.sanitizer.bypassSecurityTrustScript(value);\n      case \"url\":\n        return this.sanitizer.bypassSecurityTrustUrl(value);\n      case \"resourceUrl\":\n        return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n      default:\n        throw new Error(\n          `SafePipe unable to bypass security for invalid type: ${type}`\n        );\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n} from \"@angular/core\";\nimport { DiffFormat, DiffStyle } from \"./ngx-diff2html.model\";\n\nimport { NgxDiff2htmlService } from \"./ngx-diff2html.service\";\n\n@Component({\n  selector: \"ngx-diff2html\",\n  template: ` <div [innerHtml]=\"diffHTML | safe : 'html'\"></div> `,\n  styles: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxDiff2htmlComponent implements OnInit, OnChanges {\n  @Input() left: string;\n  @Input() right: string;\n  @Input() filename: string = \"\";\n  @Input() format: DiffFormat = \"line-by-line\";\n  @Input() style: DiffStyle = \"word\";\n  @Output() diffChange: EventEmitter<string> = new EventEmitter();\n  private diff: string = null;\n  diffHTML: string = null;\n\n  constructor(\n    private diffService: NgxDiff2htmlService,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit() {\n    this.getDiff();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      this.propHasChanged(changes.left) ||\n      this.propHasChanged(changes.right)\n    ) {\n      this.getDiff();\n    } else if (\n      this.propHasChanged(changes.style) ||\n      this.propHasChanged(changes.format)\n    ) {\n      this.refreshDiffHTML();\n    }\n  }\n\n  private propHasChanged(change: SimpleChange) {\n    return (\n      change &&\n      !change.isFirstChange() &&\n      change.currentValue !== change.previousValue\n    );\n  }\n\n  getDiff() {\n    this.diff = this.diffService.getDiff(this.left, this.right, this.filename);\n    this.refreshDiffHTML();\n    this.diffChange.emit(this.diff);\n  }\n\n  refreshDiffHTML() {\n    this.diffHTML = this.diffService.diffToHTML(\n      this.diff,\n      this.format,\n      this.style\n    );\n    this.cdr.markForCheck();\n  }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NgxDiff2htmlComponent } from \"./ngx-diff2html.component\";\nimport { SafePipe } from \"../pipes/safe.pipe\";\n\n@NgModule({\n  declarations: [NgxDiff2htmlComponent, SafePipe],\n  imports: [],\n  exports: [NgxDiff2htmlComponent],\n})\nexport class NgxDiff2htmlModule {}\n","/*\n * Public API Surface of ngx-diff2html\n */\n\nexport * from \"./lib/ngx-diff2html.service\";\nexport * from \"./lib/ngx-diff2html.component\";\nexport * from \"./lib/ngx-diff2html.module\";\nexport * from \"./lib/ngx-diff2html.model\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxDiff2htmlService","i2.SafePipe"],"mappings":"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"}