{
  "version": 3,
  "sources": ["../node_modules/.pnpm/fast-diff@1.3.0/node_modules/fast-diff/diff.js", "../src/Delta.ts", "../src/cloneDeep.ts", "../src/deepEqual.ts", "../src/AttributeMap.ts", "../src/Op.ts", "../src/OpIterator.ts"],
  "sourcesContent": ["/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @param {boolean} [cleanup] Apply semantic cleanup before returning.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {\n  // Check for equality\n  if (text1 === text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  if (cursor_pos != null) {\n    var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n    if (editdiff) {\n      return editdiff;\n    }\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs, _fix_unicode);\n  if (cleanup) {\n    diff_cleanupSemantic(diffs);\n  }\n  return diffs;\n}\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i !== -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [\n      [DIFF_INSERT, longtext.substring(0, i)],\n      [DIFF_EQUAL, shorttext],\n      [DIFF_INSERT, longtext.substring(i + shorttext.length)],\n    ];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length === 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [\n      [DIFF_DELETE, text1],\n      [DIFF_INSERT, text2],\n    ];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n}\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = delta % 2 !== 0;\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (\n        x1 < text1_length &&\n        y1 < text2_length &&\n        text1.charAt(x1) === text2.charAt(y1)\n      ) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (\n        x2 < text1_length &&\n        y2 < text2_length &&\n        text1.charAt(text1_length - x2 - 1) ===\n          text2.charAt(text2_length - y2 - 1)\n      ) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [\n    [DIFF_DELETE, text1],\n    [DIFF_INSERT, text2],\n  ];\n}\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n}\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (\n      text1.substring(pointerstart, pointermid) ==\n      text2.substring(pointerstart, pointermid)\n    ) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n\n  if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n    pointermid--;\n  }\n\n  return pointermid;\n}\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n *     string and the start of the second string.\n * @private\n */\nfunction diff_commonOverlap_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  // Eliminate the null case.\n  if (text1_length == 0 || text2_length == 0) {\n    return 0;\n  }\n  // Truncate the longer string.\n  if (text1_length > text2_length) {\n    text1 = text1.substring(text1_length - text2_length);\n  } else if (text1_length < text2_length) {\n    text2 = text2.substring(0, text1_length);\n  }\n  var text_length = Math.min(text1_length, text2_length);\n  // Quick check for the worst case.\n  if (text1 == text2) {\n    return text_length;\n  }\n\n  // Start by looking for a single character match\n  // and increase length until no match is found.\n  // Performance analysis: http://neil.fraser.name/news/2010/11/04/\n  var best = 0;\n  var length = 1;\n  while (true) {\n    var pattern = text1.substring(text_length - length);\n    var found = text2.indexOf(pattern);\n    if (found == -1) {\n      return best;\n    }\n    length += found;\n    if (\n      found == 0 ||\n      text1.substring(text_length - length) == text2.substring(0, length)\n    ) {\n      best = length;\n      length++;\n    }\n  }\n}\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (\n      text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n      text2.substring(text2.length - pointermid, text2.length - pointerend)\n    ) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n\n  if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n    pointermid--;\n  }\n\n  return pointermid;\n}\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null; // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = \"\";\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n      var prefixLength = diff_commonPrefix(\n        longtext.substring(i),\n        shorttext.substring(j)\n      );\n      var suffixLength = diff_commonSuffix(\n        longtext.substring(0, i),\n        shorttext.substring(0, j)\n      );\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common =\n          shorttext.substring(j - suffixLength, j) +\n          shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [\n        best_longtext_a,\n        best_longtext_b,\n        best_shorttext_a,\n        best_shorttext_b,\n        best_common,\n      ];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(\n    longtext,\n    shorttext,\n    Math.ceil(longtext.length / 4)\n  );\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(\n    longtext,\n    shorttext,\n    Math.ceil(longtext.length / 2)\n  );\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n}\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemantic(diffs) {\n  var changes = false;\n  var equalities = []; // Stack of indices where equalities are found.\n  var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n  /** @type {?string} */\n  var lastequality = null;\n  // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  var pointer = 0; // Index of current position.\n  // Number of characters that changed prior to the equality.\n  var length_insertions1 = 0;\n  var length_deletions1 = 0;\n  // Number of characters that changed after the equality.\n  var length_insertions2 = 0;\n  var length_deletions2 = 0;\n  while (pointer < diffs.length) {\n    if (diffs[pointer][0] == DIFF_EQUAL) {\n      // Equality found.\n      equalities[equalitiesLength++] = pointer;\n      length_insertions1 = length_insertions2;\n      length_deletions1 = length_deletions2;\n      length_insertions2 = 0;\n      length_deletions2 = 0;\n      lastequality = diffs[pointer][1];\n    } else {\n      // An insertion or deletion.\n      if (diffs[pointer][0] == DIFF_INSERT) {\n        length_insertions2 += diffs[pointer][1].length;\n      } else {\n        length_deletions2 += diffs[pointer][1].length;\n      }\n      // Eliminate an equality that is smaller or equal to the edits on both\n      // sides of it.\n      if (\n        lastequality &&\n        lastequality.length <=\n          Math.max(length_insertions1, length_deletions1) &&\n        lastequality.length <= Math.max(length_insertions2, length_deletions2)\n      ) {\n        // Duplicate record.\n        diffs.splice(equalities[equalitiesLength - 1], 0, [\n          DIFF_DELETE,\n          lastequality,\n        ]);\n        // Change second copy to insert.\n        diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n        // Throw away the equality we just deleted.\n        equalitiesLength--;\n        // Throw away the previous equality (it needs to be reevaluated).\n        equalitiesLength--;\n        pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n        length_insertions1 = 0; // Reset the counters.\n        length_deletions1 = 0;\n        length_insertions2 = 0;\n        length_deletions2 = 0;\n        lastequality = null;\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n\n  // Normalize the diff.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n  diff_cleanupSemanticLossless(diffs);\n\n  // Find any overlaps between deletions and insertions.\n  // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n  //   -> <del>abc</del>xxx<ins>def</ins>\n  // e.g: <del>xxxabc</del><ins>defxxx</ins>\n  //   -> <ins>def</ins>xxx<del>abc</del>\n  // Only extract an overlap if it is as big as the edit ahead or behind it.\n  pointer = 1;\n  while (pointer < diffs.length) {\n    if (\n      diffs[pointer - 1][0] == DIFF_DELETE &&\n      diffs[pointer][0] == DIFF_INSERT\n    ) {\n      var deletion = diffs[pointer - 1][1];\n      var insertion = diffs[pointer][1];\n      var overlap_length1 = diff_commonOverlap_(deletion, insertion);\n      var overlap_length2 = diff_commonOverlap_(insertion, deletion);\n      if (overlap_length1 >= overlap_length2) {\n        if (\n          overlap_length1 >= deletion.length / 2 ||\n          overlap_length1 >= insertion.length / 2\n        ) {\n          // Overlap found.  Insert an equality and trim the surrounding edits.\n          diffs.splice(pointer, 0, [\n            DIFF_EQUAL,\n            insertion.substring(0, overlap_length1),\n          ]);\n          diffs[pointer - 1][1] = deletion.substring(\n            0,\n            deletion.length - overlap_length1\n          );\n          diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n          pointer++;\n        }\n      } else {\n        if (\n          overlap_length2 >= deletion.length / 2 ||\n          overlap_length2 >= insertion.length / 2\n        ) {\n          // Reverse overlap found.\n          // Insert an equality and swap and trim the surrounding edits.\n          diffs.splice(pointer, 0, [\n            DIFF_EQUAL,\n            deletion.substring(0, overlap_length2),\n          ]);\n          diffs[pointer - 1][0] = DIFF_INSERT;\n          diffs[pointer - 1][1] = insertion.substring(\n            0,\n            insertion.length - overlap_length2\n          );\n          diffs[pointer + 1][0] = DIFF_DELETE;\n          diffs[pointer + 1][1] = deletion.substring(overlap_length2);\n          pointer++;\n        }\n      }\n      pointer++;\n    }\n    pointer++;\n  }\n}\n\nvar nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\nvar whitespaceRegex_ = /\\s/;\nvar linebreakRegex_ = /[\\r\\n]/;\nvar blanklineEndRegex_ = /\\n\\r?\\n$/;\nvar blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\nfunction diff_cleanupSemanticLossless(diffs) {\n  /**\n   * Given two strings, compute a score representing whether the internal\n   * boundary falls on logical boundaries.\n   * Scores range from 6 (best) to 0 (worst).\n   * Closure, but does not reference any external variables.\n   * @param {string} one First string.\n   * @param {string} two Second string.\n   * @return {number} The score.\n   * @private\n   */\n  function diff_cleanupSemanticScore_(one, two) {\n    if (!one || !two) {\n      // Edges are the best.\n      return 6;\n    }\n\n    // Each port of this function behaves slightly differently due to\n    // subtle differences in each language's definition of things like\n    // 'whitespace'.  Since this function's purpose is largely cosmetic,\n    // the choice has been made to use each language's native features\n    // rather than force total conformity.\n    var char1 = one.charAt(one.length - 1);\n    var char2 = two.charAt(0);\n    var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);\n    var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);\n    var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);\n    var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);\n    var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);\n    var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);\n    var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);\n    var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);\n\n    if (blankLine1 || blankLine2) {\n      // Five points for blank lines.\n      return 5;\n    } else if (lineBreak1 || lineBreak2) {\n      // Four points for line breaks.\n      return 4;\n    } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n      // Three points for end of sentences.\n      return 3;\n    } else if (whitespace1 || whitespace2) {\n      // Two points for whitespace.\n      return 2;\n    } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n      // One point for non-alphanumeric.\n      return 1;\n    }\n    return 0;\n  }\n\n  var pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (\n      diffs[pointer - 1][0] == DIFF_EQUAL &&\n      diffs[pointer + 1][0] == DIFF_EQUAL\n    ) {\n      // This is a single edit surrounded by equalities.\n      var equality1 = diffs[pointer - 1][1];\n      var edit = diffs[pointer][1];\n      var equality2 = diffs[pointer + 1][1];\n\n      // First, shift the edit as far left as possible.\n      var commonOffset = diff_commonSuffix(equality1, edit);\n      if (commonOffset) {\n        var commonString = edit.substring(edit.length - commonOffset);\n        equality1 = equality1.substring(0, equality1.length - commonOffset);\n        edit = commonString + edit.substring(0, edit.length - commonOffset);\n        equality2 = commonString + equality2;\n      }\n\n      // Second, step character by character right, looking for the best fit.\n      var bestEquality1 = equality1;\n      var bestEdit = edit;\n      var bestEquality2 = equality2;\n      var bestScore =\n        diff_cleanupSemanticScore_(equality1, edit) +\n        diff_cleanupSemanticScore_(edit, equality2);\n      while (edit.charAt(0) === equality2.charAt(0)) {\n        equality1 += edit.charAt(0);\n        edit = edit.substring(1) + equality2.charAt(0);\n        equality2 = equality2.substring(1);\n        var score =\n          diff_cleanupSemanticScore_(equality1, edit) +\n          diff_cleanupSemanticScore_(edit, equality2);\n        // The >= encourages trailing rather than leading whitespace on edits.\n        if (score >= bestScore) {\n          bestScore = score;\n          bestEquality1 = equality1;\n          bestEdit = edit;\n          bestEquality2 = equality2;\n        }\n      }\n\n      if (diffs[pointer - 1][1] != bestEquality1) {\n        // We have an improvement, save it back to the diff.\n        if (bestEquality1) {\n          diffs[pointer - 1][1] = bestEquality1;\n        } else {\n          diffs.splice(pointer - 1, 1);\n          pointer--;\n        }\n        diffs[pointer][1] = bestEdit;\n        if (bestEquality2) {\n          diffs[pointer + 1][1] = bestEquality2;\n        } else {\n          diffs.splice(pointer + 1, 1);\n          pointer--;\n        }\n      }\n    }\n    pointer++;\n  }\n}\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n  diffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = \"\";\n  var text_insert = \"\";\n  var commonlength;\n  while (pointer < diffs.length) {\n    if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n      diffs.splice(pointer, 1);\n      continue;\n    }\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        var previous_equality = pointer - count_insert - count_delete - 1;\n        if (fix_unicode) {\n          // prevent splitting of unicode surrogate pairs.  when fix_unicode is true,\n          // we assume that the old and new text in the diff are complete and correct\n          // unicode-encoded JS strings, but the tuple boundaries may fall between\n          // surrogate pairs.  we fix this by shaving off stray surrogates from the end\n          // of the previous equality and the beginning of this equality.  this may create\n          // empty equalities or a common prefix or suffix.  for example, if AB and AC are\n          // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n          // inserting 'AC', and then the common suffix 'AC' will be eliminated.  in this\n          // particular case, both equalities go away, we absorb any previous inequalities,\n          // and we keep scanning for the next equality before rewriting the tuples.\n          if (\n            previous_equality >= 0 &&\n            ends_with_pair_start(diffs[previous_equality][1])\n          ) {\n            var stray = diffs[previous_equality][1].slice(-1);\n            diffs[previous_equality][1] = diffs[previous_equality][1].slice(\n              0,\n              -1\n            );\n            text_delete = stray + text_delete;\n            text_insert = stray + text_insert;\n            if (!diffs[previous_equality][1]) {\n              // emptied out previous equality, so delete it and include previous delete/insert\n              diffs.splice(previous_equality, 1);\n              pointer--;\n              var k = previous_equality - 1;\n              if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n                count_insert++;\n                text_insert = diffs[k][1] + text_insert;\n                k--;\n              }\n              if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n                count_delete++;\n                text_delete = diffs[k][1] + text_delete;\n                k--;\n              }\n              previous_equality = k;\n            }\n          }\n          if (starts_with_pair_end(diffs[pointer][1])) {\n            var stray = diffs[pointer][1].charAt(0);\n            diffs[pointer][1] = diffs[pointer][1].slice(1);\n            text_delete += stray;\n            text_insert += stray;\n          }\n        }\n        if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n          // for empty equality not at end, wait for next equality\n          diffs.splice(pointer, 1);\n          break;\n        }\n        if (text_delete.length > 0 || text_insert.length > 0) {\n          // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n          if (text_delete.length > 0 && text_insert.length > 0) {\n            // Factor out any common prefixes.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if (previous_equality >= 0) {\n                diffs[previous_equality][1] += text_insert.substring(\n                  0,\n                  commonlength\n                );\n              } else {\n                diffs.splice(0, 0, [\n                  DIFF_EQUAL,\n                  text_insert.substring(0, commonlength),\n                ]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixes.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] =\n                text_insert.substring(text_insert.length - commonlength) +\n                diffs[pointer][1];\n              text_insert = text_insert.substring(\n                0,\n                text_insert.length - commonlength\n              );\n              text_delete = text_delete.substring(\n                0,\n                text_delete.length - commonlength\n              );\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          var n = count_insert + count_delete;\n          if (text_delete.length === 0 && text_insert.length === 0) {\n            diffs.splice(pointer - n, n);\n            pointer = pointer - n;\n          } else if (text_delete.length === 0) {\n            diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n            pointer = pointer - n + 1;\n          } else if (text_insert.length === 0) {\n            diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n            pointer = pointer - n + 1;\n          } else {\n            diffs.splice(\n              pointer - n,\n              n,\n              [DIFF_DELETE, text_delete],\n              [DIFF_INSERT, text_insert]\n            );\n            pointer = pointer - n + 2;\n          }\n        }\n        if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = \"\";\n        text_insert = \"\";\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === \"\") {\n    diffs.pop(); // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (\n      diffs[pointer - 1][0] === DIFF_EQUAL &&\n      diffs[pointer + 1][0] === DIFF_EQUAL\n    ) {\n      // This is a single edit surrounded by equalities.\n      if (\n        diffs[pointer][1].substring(\n          diffs[pointer][1].length - diffs[pointer - 1][1].length\n        ) === diffs[pointer - 1][1]\n      ) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] =\n          diffs[pointer - 1][1] +\n          diffs[pointer][1].substring(\n            0,\n            diffs[pointer][1].length - diffs[pointer - 1][1].length\n          );\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (\n        diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n        diffs[pointer + 1][1]\n      ) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n          diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n          diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs, fix_unicode);\n  }\n}\n\nfunction is_surrogate_pair_start(charCode) {\n  return charCode >= 0xd800 && charCode <= 0xdbff;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n  return charCode >= 0xdc00 && charCode <= 0xdfff;\n}\n\nfunction starts_with_pair_end(str) {\n  return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n  return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n  var ret = [];\n  for (var i = 0; i < tuples.length; i++) {\n    if (tuples[i][1].length > 0) {\n      ret.push(tuples[i]);\n    }\n  }\n  return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n  if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n    return null;\n  }\n  return remove_empty_tuples([\n    [DIFF_EQUAL, before],\n    [DIFF_DELETE, oldMiddle],\n    [DIFF_INSERT, newMiddle],\n    [DIFF_EQUAL, after],\n  ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n  // note: this runs after equality check has ruled out exact equality\n  var oldRange =\n    typeof cursor_pos === \"number\"\n      ? { index: cursor_pos, length: 0 }\n      : cursor_pos.oldRange;\n  var newRange = typeof cursor_pos === \"number\" ? null : cursor_pos.newRange;\n  // take into account the old and new selection to generate the best diff\n  // possible for a text edit.  for example, a text change from \"xxx\" to \"xx\"\n  // could be a delete or forwards-delete of any one of the x's, or the\n  // result of selecting two of the x's and typing \"x\".\n  var oldLength = oldText.length;\n  var newLength = newText.length;\n  if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n    // see if we have an insert or delete before or after cursor\n    var oldCursor = oldRange.index;\n    var oldBefore = oldText.slice(0, oldCursor);\n    var oldAfter = oldText.slice(oldCursor);\n    var maybeNewCursor = newRange ? newRange.index : null;\n    editBefore: {\n      // is this an insert or delete right before oldCursor?\n      var newCursor = oldCursor + newLength - oldLength;\n      if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n        break editBefore;\n      }\n      if (newCursor < 0 || newCursor > newLength) {\n        break editBefore;\n      }\n      var newBefore = newText.slice(0, newCursor);\n      var newAfter = newText.slice(newCursor);\n      if (newAfter !== oldAfter) {\n        break editBefore;\n      }\n      var prefixLength = Math.min(oldCursor, newCursor);\n      var oldPrefix = oldBefore.slice(0, prefixLength);\n      var newPrefix = newBefore.slice(0, prefixLength);\n      if (oldPrefix !== newPrefix) {\n        break editBefore;\n      }\n      var oldMiddle = oldBefore.slice(prefixLength);\n      var newMiddle = newBefore.slice(prefixLength);\n      return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n    }\n    editAfter: {\n      // is this an insert or delete right after oldCursor?\n      if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n        break editAfter;\n      }\n      var cursor = oldCursor;\n      var newBefore = newText.slice(0, cursor);\n      var newAfter = newText.slice(cursor);\n      if (newBefore !== oldBefore) {\n        break editAfter;\n      }\n      var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n      var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n      var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n      if (oldSuffix !== newSuffix) {\n        break editAfter;\n      }\n      var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n      var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n      return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n    }\n  }\n  if (oldRange.length > 0 && newRange && newRange.length === 0) {\n    replaceRange: {\n      // see if diff could be a splice of the old selection range\n      var oldPrefix = oldText.slice(0, oldRange.index);\n      var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n      var prefixLength = oldPrefix.length;\n      var suffixLength = oldSuffix.length;\n      if (newLength < prefixLength + suffixLength) {\n        break replaceRange;\n      }\n      var newPrefix = newText.slice(0, prefixLength);\n      var newSuffix = newText.slice(newLength - suffixLength);\n      if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n        break replaceRange;\n      }\n      var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n      var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n      return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n    }\n  }\n\n  return null;\n}\n\nfunction diff(text1, text2, cursor_pos, cleanup) {\n  // only pass fix_unicode=true at the top level, not when diff_main is\n  // recursively invoked\n  return diff_main(text1, text2, cursor_pos, cleanup, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n", "import diff from 'fast-diff';\nimport cloneDeep from './cloneDeep';\nimport deepEqual from './deepEqual';\nimport AttributeMap from './AttributeMap';\nimport Op from './Op';\nimport OpIterator from './OpIterator';\n\nconst NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\n\ninterface EmbedHandler<T> {\n  compose(a: T, b: T, keepNull: boolean): T;\n  invert(a: T, b: T): T;\n  transform(a: T, b: T, priority: boolean): T;\n}\n\nconst getEmbedTypeAndData = (\n  a: Op['insert'] | Op['retain'],\n  b: Op['insert'],\n): [string, unknown, unknown] => {\n  if (typeof a !== 'object' || a === null) {\n    throw new Error(`cannot retain a ${typeof a}`);\n  }\n  if (typeof b !== 'object' || b === null) {\n    throw new Error(`cannot retain a ${typeof b}`);\n  }\n  const embedType = Object.keys(a)[0];\n  if (!embedType || embedType !== Object.keys(b)[0]) {\n    throw new Error(\n      `embed types not matched: ${embedType} != ${Object.keys(b)[0]}`,\n    );\n  }\n  return [embedType, a[embedType], b[embedType]];\n};\n\nclass Delta {\n  static Op = Op;\n  static OpIterator = OpIterator;\n  static AttributeMap = AttributeMap;\n  private static handlers: { [embedType: string]: EmbedHandler<unknown> } = {};\n\n  static registerEmbed<T>(embedType: string, handler: EmbedHandler<T>): void {\n    this.handlers[embedType] = handler;\n  }\n\n  static unregisterEmbed(embedType: string): void {\n    delete this.handlers[embedType];\n  }\n\n  private static getHandler(embedType: string): EmbedHandler<unknown> {\n    const handler = this.handlers[embedType];\n    if (!handler) {\n      throw new Error(`no handlers for embed type \"${embedType}\"`);\n    }\n    return handler;\n  }\n\n  ops: Op[];\n  inverted?: Delta;\n  constructor(ops?: Op[] | { ops: Op[], inverted?: Delta }) {\n    // Assume we are given a well formed ops\n    if (Array.isArray(ops)) {\n      this.ops = ops;\n    } else if (ops != null && Array.isArray(ops.ops)) {\n      this.ops = ops.ops;\n      this.inverted = ops.inverted;\n    } else {\n      this.ops = [];\n    }\n  }\n\n  insert(\n    arg: string | Record<string, unknown>,\n    attributes?: AttributeMap | null,\n  ): this {\n    const newOp: Op = {};\n    if (typeof arg === 'string' && arg.length === 0) {\n      return this;\n    }\n    newOp.insert = arg;\n    if (\n      attributes != null &&\n      typeof attributes === 'object' &&\n      Object.keys(attributes).length > 0\n    ) {\n      newOp.attributes = attributes;\n    }\n    return this.push(newOp);\n  }\n\n  delete(length: number): this {\n    if (length <= 0) {\n      return this;\n    }\n    return this.push({ delete: length });\n  }\n\n  retain(\n    length: number | Record<string, unknown>,\n    attributes?: AttributeMap | null,\n  ): this {\n    if (typeof length === 'number' && length <= 0) {\n      return this;\n    }\n    const newOp: Op = { retain: length };\n    if (\n      attributes != null &&\n      typeof attributes === 'object' &&\n      Object.keys(attributes).length > 0\n    ) {\n      newOp.attributes = attributes;\n    }\n    return this.push(newOp);\n  }\n\n  push(newOp: Op): this {\n    let index = this.ops.length;\n    let lastOp = this.ops[index - 1];\n    newOp = cloneDeep(newOp);\n    if (typeof lastOp === 'object') {\n      if (\n        typeof newOp.delete === 'number' &&\n        typeof lastOp.delete === 'number'\n      ) {\n        this.ops[index - 1] = { delete: lastOp.delete + newOp.delete };\n        return this;\n      }\n      // Since it does not matter if we insert before or after deleting at the same index,\n      // always prefer to insert first\n      if (typeof lastOp.delete === 'number' && newOp.insert != null) {\n        index -= 1;\n        lastOp = this.ops[index - 1];\n        if (typeof lastOp !== 'object') {\n          this.ops.unshift(newOp);\n          return this;\n        }\n      }\n      if (deepEqual(newOp.attributes, lastOp.attributes)) {\n        if (\n          typeof newOp.insert === 'string' &&\n          typeof lastOp.insert === 'string'\n        ) {\n          this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n          if (typeof newOp.attributes === 'object') {\n            this.ops[index - 1].attributes = newOp.attributes;\n          }\n          return this;\n        } else if (\n          typeof newOp.retain === 'number' &&\n          typeof lastOp.retain === 'number'\n        ) {\n          this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n          if (typeof newOp.attributes === 'object') {\n            this.ops[index - 1].attributes = newOp.attributes;\n          }\n          return this;\n        }\n      }\n    }\n    if (index === this.ops.length) {\n      this.ops.push(newOp);\n    } else {\n      this.ops.splice(index, 0, newOp);\n    }\n    return this;\n  }\n\n  chop(): this {\n    const lastOp = this.ops[this.ops.length - 1];\n    if (lastOp && typeof lastOp.retain === 'number' && !lastOp.attributes) {\n      this.ops.pop();\n    }\n    return this;\n  }\n\n  filter(predicate: (op: Op, index: number) => boolean): Op[] {\n    return this.ops.filter(predicate);\n  }\n\n  forEach(predicate: (op: Op, index: number) => void): void {\n    this.ops.forEach(predicate);\n  }\n\n  map<T>(predicate: (op: Op, index: number) => T): T[] {\n    return this.ops.map(predicate);\n  }\n\n  partition(predicate: (op: Op) => boolean): [Op[], Op[]] {\n    const passed: Op[] = [];\n    const failed: Op[] = [];\n    this.forEach((op) => {\n      const target = predicate(op) ? passed : failed;\n      target.push(op);\n    });\n    return [passed, failed];\n  }\n\n  reduce<T>(\n    predicate: (accum: T, curr: Op, index: number) => T,\n    initialValue: T,\n  ): T {\n    return this.ops.reduce(predicate, initialValue);\n  }\n\n  changeLength(): number {\n    return this.reduce((length, elem) => {\n      if (elem.insert) {\n        return length + Op.length(elem);\n      } else if (elem.delete) {\n        return length - elem.delete;\n      }\n      return length;\n    }, 0);\n  }\n\n  length(): number {\n    return this.reduce((length, elem) => {\n      return length + Op.length(elem);\n    }, 0);\n  }\n\n  slice(start = 0, end = Infinity): Delta {\n    const ops = [];\n    const iter = new OpIterator(this.ops);\n    let index = 0;\n    while (index < end && iter.hasNext()) {\n      let nextOp;\n      if (index < start) {\n        nextOp = iter.next(start - index);\n      } else {\n        nextOp = iter.next(end - index);\n        ops.push(nextOp);\n      }\n      index += Op.length(nextOp);\n    }\n    return new Delta(ops);\n  }\n\n  compose(other: Delta): Delta {\n    const thisIter = new OpIterator(this.ops);\n    const otherIter = new OpIterator(other.ops);\n    const ops = [];\n    const firstOther = otherIter.peek();\n    if (\n      firstOther != null &&\n      typeof firstOther.retain === 'number' &&\n      firstOther.attributes == null\n    ) {\n      let firstLeft = firstOther.retain;\n      while (\n        thisIter.peekType() === 'insert' &&\n        thisIter.peekLength() <= firstLeft\n      ) {\n        firstLeft -= thisIter.peekLength();\n        ops.push(thisIter.next());\n      }\n      if (firstOther.retain - firstLeft > 0) {\n        otherIter.next(firstOther.retain - firstLeft);\n      }\n    }\n    const delta = new Delta(ops);\n    while (thisIter.hasNext() || otherIter.hasNext()) {\n      if (otherIter.peekType() === 'insert') {\n        delta.push(otherIter.next());\n      } else if (thisIter.peekType() === 'delete') {\n        delta.push(thisIter.next());\n      } else {\n        const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n        const thisOp = thisIter.next(length);\n        const otherOp = otherIter.next(length);\n        if (otherOp.retain) {\n          const newOp: Op = {};\n          if (typeof thisOp.retain === 'number') {\n            newOp.retain =\n              typeof otherOp.retain === 'number' ? length : otherOp.retain;\n          } else {\n            if (typeof otherOp.retain === 'number') {\n              if (thisOp.retain == null) {\n                newOp.insert = thisOp.insert;\n              } else {\n                newOp.retain = thisOp.retain;\n              }\n            } else {\n              const action = thisOp.retain == null ? 'insert' : 'retain';\n              const [embedType, thisData, otherData] = getEmbedTypeAndData(\n                thisOp[action],\n                otherOp.retain,\n              );\n              const handler = Delta.getHandler(embedType);\n              newOp[action] = {\n                [embedType]: handler.compose(\n                  thisData,\n                  otherData,\n                  action === 'retain',\n                ),\n              };\n            }\n          }\n          // Preserve null when composing with a retain, otherwise remove it for inserts\n          const attributes = AttributeMap.compose(\n            thisOp.attributes,\n            otherOp.attributes,\n            typeof thisOp.retain === 'number',\n          );\n          if (attributes) {\n            newOp.attributes = attributes;\n          }\n          delta.push(newOp);\n\n          // Optimization if rest of other is just retain\n          if (\n            !otherIter.hasNext() &&\n            deepEqual(delta.ops[delta.ops.length - 1], newOp)\n          ) {\n            const rest = new Delta(thisIter.rest());\n            return delta.concat(rest).chop();\n          }\n\n          // Other op should be delete, we could be an insert or retain\n          // Insert + delete cancels out\n        } else if (\n          typeof otherOp.delete === 'number' &&\n          (typeof thisOp.retain === 'number' ||\n            (typeof thisOp.retain === 'object' && thisOp.retain !== null))\n        ) {\n          delta.push(otherOp);\n        }\n      }\n    }\n    return delta.chop();\n  }\n\n  concat(other: Delta): Delta {\n    const delta = new Delta(this.ops.slice());\n    if (other.ops.length > 0) {\n      delta.push(other.ops[0]);\n      delta.ops = delta.ops.concat(other.ops.slice(1));\n    }\n    return delta;\n  }\n\n  diff(other: Delta, cursor?: number | diff.CursorInfo): Delta {\n    if (this.ops === other.ops) {\n      return new Delta();\n    }\n    const strings = [this, other].map((delta) => {\n      return delta\n        .map((op) => {\n          if (op.insert != null) {\n            return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n          }\n          const prep = delta === other ? 'on' : 'with';\n          throw new Error('diff() called ' + prep + ' non-document');\n        })\n        .join('');\n    });\n    const retDelta = new Delta();\n    const diffResult = diff(strings[0], strings[1], cursor, true);\n    const thisIter = new OpIterator(this.ops);\n    const otherIter = new OpIterator(other.ops);\n    diffResult.forEach((component: diff.Diff) => {\n      let length = component[1].length;\n      while (length > 0) {\n        let opLength = 0;\n        switch (component[0]) {\n          case diff.INSERT:\n            opLength = Math.min(otherIter.peekLength(), length);\n            retDelta.push(otherIter.next(opLength));\n            break;\n          case diff.DELETE:\n            opLength = Math.min(length, thisIter.peekLength());\n            thisIter.next(opLength);\n            retDelta.delete(opLength);\n            break;\n          case diff.EQUAL:\n            opLength = Math.min(\n              thisIter.peekLength(),\n              otherIter.peekLength(),\n              length,\n            );\n            const thisOp = thisIter.next(opLength);\n            const otherOp = otherIter.next(opLength);\n            if (deepEqual(thisOp.insert, otherOp.insert)) {\n              retDelta.retain(\n                opLength,\n                AttributeMap.diff(thisOp.attributes, otherOp.attributes),\n              );\n            } else {\n              retDelta.push(otherOp).delete(opLength);\n            }\n            break;\n        }\n        length -= opLength;\n      }\n    });\n    return retDelta.chop();\n  }\n\n  eachLine(\n    predicate: (\n      line: Delta,\n      attributes: AttributeMap,\n      index: number,\n    ) => boolean | void,\n    newline = '\\n',\n  ): void {\n    const iter = new OpIterator(this.ops);\n    let line = new Delta();\n    let i = 0;\n    while (iter.hasNext()) {\n      if (iter.peekType() !== 'insert') {\n        return;\n      }\n      const thisOp = iter.peek();\n      const start = Op.length(thisOp) - iter.peekLength();\n      const index =\n        typeof thisOp.insert === 'string'\n          ? thisOp.insert.indexOf(newline, start) - start\n          : -1;\n      if (index < 0) {\n        line.push(iter.next());\n      } else if (index > 0) {\n        line.push(iter.next(index));\n      } else {\n        if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n          return;\n        }\n        i += 1;\n        line = new Delta();\n      }\n    }\n    if (line.length() > 0) {\n      predicate(line, {}, i);\n    }\n  }\n\n  invert(base: Delta): Delta {\n    const inverted = new Delta();\n    this.reduce((baseIndex, op) => {\n      if (op.insert) {\n        inverted.delete(Op.length(op));\n      } else if (typeof op.retain === 'number' && op.attributes == null) {\n        inverted.retain(op.retain);\n        return baseIndex + op.retain;\n      } else if (op.delete || typeof op.retain === 'number') {\n        const length = (op.delete || op.retain) as number;\n        const slice = base.slice(baseIndex, baseIndex + length);\n        slice.forEach((baseOp) => {\n          if (op.delete) {\n            inverted.push(baseOp);\n          } else if (op.retain && op.attributes) {\n            inverted.retain(\n              Op.length(baseOp),\n              AttributeMap.invert(op.attributes, baseOp.attributes),\n            );\n          }\n        });\n        return baseIndex + length;\n      } else if (typeof op.retain === 'object' && op.retain !== null) {\n        const slice = base.slice(baseIndex, baseIndex + 1);\n        const baseOp = new OpIterator(slice.ops).next();\n        const [embedType, opData, baseOpData] = getEmbedTypeAndData(\n          op.retain,\n          baseOp.insert,\n        );\n        const handler = Delta.getHandler(embedType);\n        inverted.retain(\n          { [embedType]: handler.invert(opData, baseOpData) },\n          AttributeMap.invert(op.attributes, baseOp.attributes),\n        );\n        return baseIndex + 1;\n      }\n      return baseIndex;\n    }, 0);\n    return inverted.chop();\n  }\n\n  transform(index: number, priority?: boolean): number;\n  transform(other: Delta, priority?: boolean): Delta;\n  transform(arg: number | Delta, priority = false): typeof arg {\n    priority = !!priority;\n    if (typeof arg === 'number') {\n      return this.transformPosition(arg, priority);\n    }\n    const other: Delta = arg;\n    const thisIter = new OpIterator(this.ops);\n    const otherIter = new OpIterator(other.ops);\n    const delta = new Delta();\n    while (thisIter.hasNext() || otherIter.hasNext()) {\n      if (\n        thisIter.peekType() === 'insert' &&\n        (priority || otherIter.peekType() !== 'insert')\n      ) {\n        delta.retain(Op.length(thisIter.next()));\n      } else if (otherIter.peekType() === 'insert') {\n        delta.push(otherIter.next());\n      } else {\n        const length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n        const thisOp = thisIter.next(length);\n        const otherOp = otherIter.next(length);\n        if (thisOp.delete) {\n          // Our delete either makes their delete redundant or removes their retain\n          continue;\n        } else if (otherOp.delete) {\n          delta.push(otherOp);\n        } else {\n          const thisData = thisOp.retain;\n          const otherData = otherOp.retain;\n          let transformedData: Op['retain'] =\n            typeof otherData === 'object' && otherData !== null\n              ? otherData\n              : length;\n          if (\n            typeof thisData === 'object' &&\n            thisData !== null &&\n            typeof otherData === 'object' &&\n            otherData !== null\n          ) {\n            const embedType = Object.keys(thisData)[0];\n            if (embedType === Object.keys(otherData)[0]) {\n              const handler = Delta.getHandler(embedType);\n              if (handler) {\n                transformedData = {\n                  [embedType]: handler.transform(\n                    thisData[embedType],\n                    otherData[embedType],\n                    priority,\n                  ),\n                };\n              }\n            }\n          }\n\n          // We retain either their retain or insert\n          delta.retain(\n            transformedData,\n            AttributeMap.transform(\n              thisOp.attributes,\n              otherOp.attributes,\n              priority,\n            ),\n          );\n        }\n      }\n    }\n    return delta.chop();\n  }\n\n  transformPosition(index: number, priority = false): number {\n    priority = !!priority;\n    const thisIter = new OpIterator(this.ops);\n    let offset = 0;\n    while (thisIter.hasNext() && offset <= index) {\n      const length = thisIter.peekLength();\n      const nextType = thisIter.peekType();\n      thisIter.next();\n      if (nextType === 'delete') {\n        index -= Math.min(length, index - offset);\n        continue;\n      } else if (nextType === 'insert' && (offset < index || !priority)) {\n        index += length;\n      }\n      offset += length;\n    }\n    return index;\n  }\n}\n\nexport default Delta;\n\nexport { Op, OpIterator, AttributeMap };\n\nif (typeof module === 'object') {\n  module.exports = Delta;\n  module.exports.default = Delta;\n}\n", "/**\n * This is much smaller and faster than the lodash-es version.\n */\nfunction cloneDeep<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nexport default cloneDeep;\n", "function deepEqual(obj1: any, obj2: any): boolean {\n  if (obj1 === obj2)\n    // it's just the same object. No need to compare.\n    return true;\n\n  if (isPrimitive(obj1) || isPrimitive(obj2))\n    // compare primitives\n    return obj1 === obj2;\n\n  if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;\n\n  // compare objects with same number of keys\n  for (let key in obj1) {\n    if (!(key in obj2)) return false; //other object doesn't have this prop\n    if (!deepEqual(obj1[key], obj2[key])) return false;\n  }\n\n  return true;\n}\n\n//check if value is primitive\nfunction isPrimitive(obj: any) {\n  return obj !== Object(obj);\n}\n\nexport default deepEqual;\n", "import cloneDeep from './cloneDeep';\nimport deepEqual from './deepEqual';\n\ninterface AttributeMap {\n  [key: string]: unknown;\n}\n\nnamespace AttributeMap {\n  export function compose(\n    a: AttributeMap = {},\n    b: AttributeMap = {},\n    keepNull = false,\n  ): AttributeMap | undefined {\n    if (typeof a !== 'object') {\n      a = {};\n    }\n    if (typeof b !== 'object') {\n      b = {};\n    }\n    let attributes = cloneDeep(b);\n    if (!keepNull) {\n      attributes = Object.keys(attributes).reduce<AttributeMap>((copy, key) => {\n        if (attributes[key] != null) {\n          copy[key] = attributes[key];\n        }\n        return copy;\n      }, {});\n    }\n    for (const key in a) {\n      if (a[key] !== undefined && b[key] === undefined) {\n        attributes[key] = a[key];\n      }\n    }\n    return Object.keys(attributes).length > 0 ? attributes : undefined;\n  }\n\n  export function diff(\n    a: AttributeMap = {},\n    b: AttributeMap = {},\n  ): AttributeMap | undefined {\n    if (typeof a !== 'object') {\n      a = {};\n    }\n    if (typeof b !== 'object') {\n      b = {};\n    }\n    const attributes = Object.keys(a)\n      .concat(Object.keys(b))\n      .reduce<AttributeMap>((attrs, key) => {\n        if (!deepEqual(a[key], b[key])) {\n          attrs[key] = b[key] === undefined ? null : b[key];\n        }\n        return attrs;\n      }, {});\n    return Object.keys(attributes).length > 0 ? attributes : undefined;\n  }\n\n  export function invert(\n    attr: AttributeMap = {},\n    base: AttributeMap = {},\n  ): AttributeMap {\n    attr = attr || {};\n    const baseInverted = Object.keys(base).reduce<AttributeMap>((memo, key) => {\n      if (base[key] !== attr[key] && attr[key] !== undefined) {\n        memo[key] = base[key];\n      }\n      return memo;\n    }, {});\n    return Object.keys(attr).reduce<AttributeMap>((memo, key) => {\n      if (attr[key] !== base[key] && base[key] === undefined) {\n        memo[key] = null;\n      }\n      return memo;\n    }, baseInverted);\n  }\n\n  export function transform(\n    a: AttributeMap | undefined,\n    b: AttributeMap | undefined,\n    priority = false,\n  ): AttributeMap | undefined {\n    if (typeof a !== 'object') {\n      return b;\n    }\n    if (typeof b !== 'object') {\n      return undefined;\n    }\n    if (!priority) {\n      return b; // b simply overwrites us without priority\n    }\n    const attributes = Object.keys(b).reduce<AttributeMap>((attrs, key) => {\n      if (a[key] === undefined) {\n        attrs[key] = b[key]; // null is a valid value\n      }\n      return attrs;\n    }, {});\n    return Object.keys(attributes).length > 0 ? attributes : undefined;\n  }\n}\n\nexport default AttributeMap;\n", "import AttributeMap from './AttributeMap';\n\ninterface Op {\n  // only one property out of {insert, delete, retain} will be present\n  insert?: string | Record<string, unknown>;\n  delete?: number;\n  retain?: number | Record<string, unknown>;\n\n  attributes?: AttributeMap;\n}\n\nnamespace Op {\n  export function length(op: Op): number {\n    if (typeof op.delete === 'number') {\n      return op.delete;\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else if (typeof op.retain === 'object' && op.retain !== null) {\n      return 1;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n}\n\nexport default Op;\n", "import Op from './Op';\n\nexport default class Iterator {\n  ops: Op[];\n  index: number;\n  offset: number;\n\n  constructor(ops: Op[]) {\n    this.ops = ops;\n    this.index = 0;\n    this.offset = 0;\n  }\n\n  hasNext(): boolean {\n    return this.peekLength() < Infinity;\n  }\n\n  next(length?: number): Op {\n    if (!length) {\n      length = Infinity;\n    }\n    const nextOp = this.ops[this.index];\n    if (nextOp) {\n      const offset = this.offset;\n      const opLength = Op.length(nextOp);\n      if (length >= opLength - offset) {\n        length = opLength - offset;\n        this.index += 1;\n        this.offset = 0;\n      } else {\n        this.offset += length;\n      }\n      if (typeof nextOp.delete === 'number') {\n        return { delete: length };\n      } else {\n        const retOp: Op = {};\n        if (nextOp.attributes) {\n          retOp.attributes = nextOp.attributes;\n        }\n        if (typeof nextOp.retain === 'number') {\n          retOp.retain = length;\n        } else if (\n          typeof nextOp.retain === 'object' &&\n          nextOp.retain !== null\n        ) {\n          // offset should === 0, length should === 1\n          retOp.retain = nextOp.retain;\n        } else if (typeof nextOp.insert === 'string') {\n          retOp.insert = nextOp.insert.substr(offset, length);\n        } else {\n          // offset should === 0, length should === 1\n          retOp.insert = nextOp.insert;\n        }\n        return retOp;\n      }\n    } else {\n      return { retain: Infinity };\n    }\n  }\n\n  peek(): Op {\n    return this.ops[this.index];\n  }\n\n  peekLength(): number {\n    if (this.ops[this.index]) {\n      // Should never return 0 if our index is being managed correctly\n      return Op.length(this.ops[this.index]) - this.offset;\n    } else {\n      return Infinity;\n    }\n  }\n\n  peekType(): string {\n    const op = this.ops[this.index];\n    if (op) {\n      if (typeof op.delete === 'number') {\n        return 'delete';\n      } else if (\n        typeof op.retain === 'number' ||\n        (typeof op.retain === 'object' && op.retain !== null)\n      ) {\n        return 'retain';\n      } else {\n        return 'insert';\n      }\n    }\n    return 'retain';\n  }\n\n  rest(): Op[] {\n    if (!this.hasNext()) {\n      return [];\n    } else if (this.offset === 0) {\n      return this.ops.slice(this.index);\n    } else {\n      const offset = this.offset;\n      const index = this.index;\n      const next = this.next();\n      const rest = this.ops.slice(this.index);\n      this.offset = offset;\n      this.index = index;\n      return [next].concat(rest);\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": ["module", "longtext", "shorttext", "diff", "AttributeMap", "diff", "Op", "diff"]
}
