'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) Meta Platforms, Inc. and affiliates. * * 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;