You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.5 KiB
85 lines
2.5 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { |
|
value: true |
|
}); |
|
exports.diffStringsUnified = exports.diffStringsRaw = void 0; |
|
|
|
var _cleanupSemantic = require('./cleanupSemantic'); |
|
|
|
var _diffLines = require('./diffLines'); |
|
|
|
var _diffStrings = _interopRequireDefault(require('./diffStrings')); |
|
|
|
var _getAlignedDiffs = _interopRequireDefault(require('./getAlignedDiffs')); |
|
|
|
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 hasCommonDiff = (diffs, isMultiline) => { |
|
if (isMultiline) { |
|
// Important: Ignore common newline that was appended to multiline strings! |
|
const iLast = diffs.length - 1; |
|
return diffs.some( |
|
(diff, i) => |
|
diff[0] === _cleanupSemantic.DIFF_EQUAL && |
|
(i !== iLast || diff[1] !== '\n') |
|
); |
|
} |
|
|
|
return diffs.some(diff => diff[0] === _cleanupSemantic.DIFF_EQUAL); |
|
}; // Compare two strings character-by-character. |
|
// Format as comparison lines in which changed substrings have inverse colors. |
|
|
|
const diffStringsUnified = (a, b, options) => { |
|
if (a !== b && a.length !== 0 && b.length !== 0) { |
|
const isMultiline = a.includes('\n') || b.includes('\n'); // getAlignedDiffs assumes that a newline was appended to the strings. |
|
|
|
const diffs = diffStringsRaw( |
|
isMultiline ? a + '\n' : a, |
|
isMultiline ? b + '\n' : b, |
|
true // cleanupSemantic |
|
); |
|
|
|
if (hasCommonDiff(diffs, isMultiline)) { |
|
const optionsNormalized = (0, _normalizeDiffOptions.normalizeDiffOptions)( |
|
options |
|
); |
|
const lines = (0, _getAlignedDiffs.default)( |
|
diffs, |
|
optionsNormalized.changeColor |
|
); |
|
return (0, _diffLines.printDiffLines)(lines, optionsNormalized); |
|
} |
|
} // Fall back to line-by-line diff. |
|
|
|
return (0, _diffLines.diffLinesUnified)( |
|
a.split('\n'), |
|
b.split('\n'), |
|
options |
|
); |
|
}; // Compare two strings character-by-character. |
|
// Optionally clean up small common substrings, also known as chaff. |
|
|
|
exports.diffStringsUnified = diffStringsUnified; |
|
|
|
const diffStringsRaw = (a, b, cleanup) => { |
|
const diffs = (0, _diffStrings.default)(a, b); |
|
|
|
if (cleanup) { |
|
(0, _cleanupSemantic.cleanupSemantic)(diffs); // impure function |
|
} |
|
|
|
return diffs; |
|
}; |
|
|
|
exports.diffStringsRaw = diffStringsRaw;
|
|
|