123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- exports.diffLinesRaw = exports.diffLinesUnified2 = exports.diffLinesUnified = void 0;
- var _diffSequences = _interopRequireDefault(require('diff-sequences'));
- var _cleanupSemantic = require('./cleanupSemantic');
- var _normalizeDiffOptions = require('./normalizeDiffOptions');
- var _printDiffs = require('./printDiffs');
- 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; // Compare two arrays of strings line-by-line. Format as comparison lines.
- const diffLinesUnified = (aLines, bLines, options) =>
- (0, _printDiffs.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 (0, _printDiffs.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;
|