| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 | 'use strict';Object.defineProperty(exports, '__esModule', {  value: true});exports.printDiffLines =  exports.diffLinesUnified2 =  exports.diffLinesUnified =  exports.diffLinesRaw =    void 0;var _diffSequences = _interopRequireDefault(require('diff-sequences'));var _cleanupSemantic = require('./cleanupSemantic');var _joinAlignedDiffs = require('./joinAlignedDiffs');var _normalizeDiffOptions = require('./normalizeDiffOptions');function _interopRequireDefault(obj) {  return obj && obj.__esModule ? obj : {default: obj};}/** * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */const isEmptyString = lines => lines.length === 1 && lines[0].length === 0;const countChanges = diffs => {  let a = 0;  let b = 0;  diffs.forEach(diff => {    switch (diff[0]) {      case _cleanupSemantic.DIFF_DELETE:        a += 1;        break;      case _cleanupSemantic.DIFF_INSERT:        b += 1;        break;    }  });  return {    a,    b  };};const printAnnotation = (  {    aAnnotation,    aColor,    aIndicator,    bAnnotation,    bColor,    bIndicator,    includeChangeCounts,    omitAnnotationLines  },  changeCounts) => {  if (omitAnnotationLines) {    return '';  }  let aRest = '';  let bRest = '';  if (includeChangeCounts) {    const aCount = String(changeCounts.a);    const bCount = String(changeCounts.b); // Padding right aligns the ends of the annotations.    const baAnnotationLengthDiff = bAnnotation.length - aAnnotation.length;    const aAnnotationPadding = ' '.repeat(Math.max(0, baAnnotationLengthDiff));    const bAnnotationPadding = ' '.repeat(Math.max(0, -baAnnotationLengthDiff)); // Padding left aligns the ends of the counts.    const baCountLengthDiff = bCount.length - aCount.length;    const aCountPadding = ' '.repeat(Math.max(0, baCountLengthDiff));    const bCountPadding = ' '.repeat(Math.max(0, -baCountLengthDiff));    aRest =      aAnnotationPadding + '  ' + aIndicator + ' ' + aCountPadding + aCount;    bRest =      bAnnotationPadding + '  ' + bIndicator + ' ' + bCountPadding + bCount;  }  return (    aColor(aIndicator + ' ' + aAnnotation + aRest) +    '\n' +    bColor(bIndicator + ' ' + bAnnotation + bRest) +    '\n\n'  );};const printDiffLines = (diffs, options) =>  printAnnotation(options, countChanges(diffs)) +  (options.expand    ? (0, _joinAlignedDiffs.joinAlignedDiffsExpand)(diffs, options)    : (0, _joinAlignedDiffs.joinAlignedDiffsNoExpand)(diffs, options)); // Compare two arrays of strings line-by-line. Format as comparison lines.exports.printDiffLines = printDiffLines;const diffLinesUnified = (aLines, bLines, options) =>  printDiffLines(    diffLinesRaw(      isEmptyString(aLines) ? [] : aLines,      isEmptyString(bLines) ? [] : bLines    ),    (0, _normalizeDiffOptions.normalizeDiffOptions)(options)  ); // Given two pairs of arrays of strings:// Compare the pair of comparison arrays line-by-line.// Format the corresponding lines in the pair of displayable arrays.exports.diffLinesUnified = diffLinesUnified;const diffLinesUnified2 = (  aLinesDisplay,  bLinesDisplay,  aLinesCompare,  bLinesCompare,  options) => {  if (isEmptyString(aLinesDisplay) && isEmptyString(aLinesCompare)) {    aLinesDisplay = [];    aLinesCompare = [];  }  if (isEmptyString(bLinesDisplay) && isEmptyString(bLinesCompare)) {    bLinesDisplay = [];    bLinesCompare = [];  }  if (    aLinesDisplay.length !== aLinesCompare.length ||    bLinesDisplay.length !== bLinesCompare.length  ) {    // Fall back to diff of display lines.    return diffLinesUnified(aLinesDisplay, bLinesDisplay, options);  }  const diffs = diffLinesRaw(aLinesCompare, bLinesCompare); // Replace comparison lines with displayable lines.  let aIndex = 0;  let bIndex = 0;  diffs.forEach(diff => {    switch (diff[0]) {      case _cleanupSemantic.DIFF_DELETE:        diff[1] = aLinesDisplay[aIndex];        aIndex += 1;        break;      case _cleanupSemantic.DIFF_INSERT:        diff[1] = bLinesDisplay[bIndex];        bIndex += 1;        break;      default:        diff[1] = bLinesDisplay[bIndex];        aIndex += 1;        bIndex += 1;    }  });  return printDiffLines(    diffs,    (0, _normalizeDiffOptions.normalizeDiffOptions)(options)  );}; // Compare two arrays of strings line-by-line.exports.diffLinesUnified2 = diffLinesUnified2;const diffLinesRaw = (aLines, bLines) => {  const aLength = aLines.length;  const bLength = bLines.length;  const isCommon = (aIndex, bIndex) => aLines[aIndex] === bLines[bIndex];  const diffs = [];  let aIndex = 0;  let bIndex = 0;  const foundSubsequence = (nCommon, aCommon, bCommon) => {    for (; aIndex !== aCommon; aIndex += 1) {      diffs.push(        new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])      );    }    for (; bIndex !== bCommon; bIndex += 1) {      diffs.push(        new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])      );    }    for (; nCommon !== 0; nCommon -= 1, aIndex += 1, bIndex += 1) {      diffs.push(        new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_EQUAL, bLines[bIndex])      );    }  };  (0, _diffSequences.default)(aLength, bLength, isCommon, foundSubsequence); // After the last common subsequence, push remaining change items.  for (; aIndex !== aLength; aIndex += 1) {    diffs.push(      new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_DELETE, aLines[aIndex])    );  }  for (; bIndex !== bLength; bIndex += 1) {    diffs.push(      new _cleanupSemantic.Diff(_cleanupSemantic.DIFF_INSERT, bLines[bIndex])    );  }  return diffs;};exports.diffLinesRaw = diffLinesRaw;
 |