{
  "version": 3,
  "sources": ["../src/diff3.mjs"],
  "sourcesContent": [
    "export {\n  LCS,\n  diffComm,\n  diffIndices,\n  diffPatch,\n  diff3MergeRegions,\n  diff3Merge,\n  mergeDiff3,\n  merge,\n  mergeDigIn,\n  patch,\n  stripPatch,\n  invertPatch\n};\n\n\n// Text diff algorithm following Hunt and McIlroy 1976.\n// J. W. Hunt and M. D. McIlroy, An algorithm for differential buffer\n// comparison, Bell Telephone Laboratories CSTR #41 (1976)\n// http://www.cs.dartmouth.edu/~doug/\n// https://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n//\n// Expects two arrays, finds longest common sequence\nfunction LCS(buffer1, buffer2) {\n  let equivalenceClasses = {};\n  for (let j = 0; j < buffer2.length; j++) {\n    const item = buffer2[j];\n    if (equivalenceClasses[item]) {\n      equivalenceClasses[item].push(j);\n    } else {\n      equivalenceClasses[item] = [j];\n    }\n  }\n\n  const NULLRESULT = { buffer1index: -1, buffer2index: -1, chain: null };\n  let candidates = [NULLRESULT];\n\n  for (let i = 0; i < buffer1.length; i++) {\n    const item = buffer1[i];\n    const buffer2indices = equivalenceClasses[item] || [];\n    let r = 0;\n    let c = candidates[0];\n\n    for (let jx = 0; jx < buffer2indices.length; jx++) {\n      const j = buffer2indices[jx];\n\n      let s;\n      for (s = r; s < candidates.length; s++) {\n        if ((candidates[s].buffer2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].buffer2index > j))) {\n          break;\n        }\n      }\n\n      if (s < candidates.length) {\n        const newCandidate = { buffer1index: i, buffer2index: j, chain: candidates[s] };\n        if (r === candidates.length) {\n          candidates.push(c);\n        } else {\n          candidates[r] = c;\n        }\n        r = s + 1;\n        c = newCandidate;\n        if (r === candidates.length) {\n          break; // no point in examining further (j)s\n        }\n      }\n    }\n\n    candidates[r] = c;\n  }\n\n  // At this point, we know the LCS: it's in the reverse of the\n  // linked-list through .chain of candidates[candidates.length - 1].\n\n  return candidates[candidates.length - 1];\n}\n\n\n// We apply the LCS to build a 'comm'-style picture of the\n// differences between buffer1 and buffer2.\nfunction diffComm(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n  let common = {common: []};\n\n  function processCommon() {\n    if (common.common.length) {\n      common.common.reverse();\n      result.push(common);\n      common = {common: []};\n    }\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    let different = {buffer1: [], buffer2: []};\n\n    while (--tail1 > candidate.buffer1index) {\n      different.buffer1.push(buffer1[tail1]);\n    }\n\n    while (--tail2 > candidate.buffer2index) {\n      different.buffer2.push(buffer2[tail2]);\n    }\n\n    if (different.buffer1.length || different.buffer2.length) {\n      processCommon();\n      different.buffer1.reverse();\n      different.buffer2.reverse();\n      result.push(different);\n    }\n\n    if (tail1 >= 0) {\n      common.common.push(buffer1[tail1]);\n    }\n  }\n\n  processCommon();\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to give a simple representation of the\n// offsets and lengths of mismatched chunks in the input\n// buffers. This is used by diff3MergeRegions.\nfunction diffIndices(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: [tail1 + 1, mismatchLength1],\n        buffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),\n        buffer2: [tail2 + 1, mismatchLength2],\n        buffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// We apply the LCS to build a JSON representation of a\n// diff(1)-style patch.\nfunction diffPatch(buffer1, buffer2) {\n  const lcs = LCS(buffer1, buffer2);\n  let result = [];\n  let tail1 = buffer1.length;\n  let tail2 = buffer2.length;\n\n  function chunkDescription(buffer, offset, length) {\n    let chunk = [];\n    for (let i = 0; i < length; i++) {\n      chunk.push(buffer[offset + i]);\n    }\n    return {\n      offset: offset,\n      length: length,\n      chunk: chunk\n    };\n  }\n\n  for (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n    const mismatchLength1 = tail1 - candidate.buffer1index - 1;\n    const mismatchLength2 = tail2 - candidate.buffer2index - 1;\n    tail1 = candidate.buffer1index;\n    tail2 = candidate.buffer2index;\n\n    if (mismatchLength1 || mismatchLength2) {\n      result.push({\n        buffer1: chunkDescription(buffer1, candidate.buffer1index + 1, mismatchLength1),\n        buffer2: chunkDescription(buffer2, candidate.buffer2index + 1, mismatchLength2)\n      });\n    }\n  }\n\n  result.reverse();\n  return result;\n}\n\n\n// Given three buffers, A, O, and B, where both A and B are\n// independently derived from O, returns a fairly complicated\n// internal representation of merge decisions it's taken. The\n// interested reader may wish to consult\n//\n// Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.\n// 'A Formal Investigation of ' In Arvind and Prasad,\n// editors, Foundations of Software Technology and Theoretical\n// Computer Science (FSTTCS), December 2007.\n//\n// (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)\n//\nfunction diff3MergeRegions(a, o, b) {\n\n  // \"hunks\" are array subsets where `a` or `b` are different from `o`\n  // https://www.gnu.org/software/diffutils/manual/html_node/diff3-Hunks.html\n  let hunks = [];\n  function addHunk(h, ab) {\n    hunks.push({\n      ab: ab,\n      oStart: h.buffer1[0],\n      oLength: h.buffer1[1],   // length of o to remove\n      abStart: h.buffer2[0],\n      abLength: h.buffer2[1]   // length of a/b to insert\n      // abContent: (ab === 'a' ? a : b).slice(h.buffer2[0], h.buffer2[0] + h.buffer2[1])\n    });\n  }\n\n  diffIndices(o, a).forEach(item => addHunk(item, 'a'));\n  diffIndices(o, b).forEach(item => addHunk(item, 'b'));\n  hunks.sort((x,y) => x.oStart - y.oStart);\n\n  let results = [];\n  let currOffset = 0;\n\n  function advanceTo(endOffset) {\n    if (endOffset > currOffset) {\n      results.push({\n        stable: true,\n        buffer: 'o',\n        bufferStart: currOffset,\n        bufferLength: endOffset - currOffset,\n        bufferContent: o.slice(currOffset, endOffset)\n      });\n      currOffset = endOffset;\n    }\n  }\n\n  while (hunks.length) {\n    let hunk = hunks.shift();\n    let regionStart = hunk.oStart;\n    let regionEnd = hunk.oStart + hunk.oLength;\n    let regionHunks = [hunk];\n    advanceTo(regionStart);\n\n    // Try to pull next overlapping hunk into this region\n    while (hunks.length) {\n      const nextHunk = hunks[0];\n      const nextHunkStart = nextHunk.oStart;\n      if (nextHunkStart > regionEnd) break;   // no overlap\n\n      regionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);\n      regionHunks.push(hunks.shift());\n    }\n\n    if (regionHunks.length === 1) {\n      // Only one hunk touches this region, meaning that there is no conflict here.\n      // Either `a` or `b` is inserting into a region of `o` unchanged by the other.\n      if (hunk.abLength > 0) {\n        const buffer = (hunk.ab === 'a' ? a : b);\n        results.push({\n          stable: true,\n          buffer: hunk.ab,\n          bufferStart: hunk.abStart,\n          bufferLength: hunk.abLength,\n          bufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)\n        });\n      }\n    } else {\n      // A true a/b conflict. Determine the bounds involved from `a`, `o`, and `b`.\n      // Effectively merge all the `a` hunks into one giant hunk, then do the\n      // same for the `b` hunks; then, correct for skew in the regions of `o`\n      // that each side changed, and report appropriate spans for the three sides.\n      let bounds = {\n        a: [a.length, -1, o.length, -1],\n        b: [b.length, -1, o.length, -1]\n      };\n      while (regionHunks.length) {\n        hunk = regionHunks.shift();\n        const oStart = hunk.oStart;\n        const oEnd = oStart + hunk.oLength;\n        const abStart = hunk.abStart;\n        const abEnd = abStart + hunk.abLength;\n        let b = bounds[hunk.ab];\n        b[0] = Math.min(abStart, b[0]);\n        b[1] = Math.max(abEnd, b[1]);\n        b[2] = Math.min(oStart, b[2]);\n        b[3] = Math.max(oEnd, b[3]);\n      }\n\n      const aStart = bounds.a[0] + (regionStart - bounds.a[2]);\n      const aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);\n      const bStart = bounds.b[0] + (regionStart - bounds.b[2]);\n      const bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);\n\n      let result = {\n        stable: false,\n        aStart: aStart,\n        aLength: aEnd - aStart,\n        aContent: a.slice(aStart, aEnd),\n        oStart: regionStart,\n        oLength: regionEnd - regionStart,\n        oContent: o.slice(regionStart, regionEnd),\n        bStart: bStart,\n        bLength: bEnd - bStart,\n        bContent: b.slice(bStart, bEnd)\n      };\n      results.push(result);\n    }\n    currOffset = regionEnd;\n  }\n\n  advanceTo(o.length);\n\n  return results;\n}\n\n\n// Applies the output of diff3MergeRegions to actually\n// construct the merged buffer; the returned result alternates\n// between 'ok' and 'conflict' blocks.\n// A \"false conflict\" is where `a` and `b` both change the same from `o`\nfunction diff3Merge(a, o, b, options) {\n  let defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/\n  };\n  options = Object.assign(defaults, options);\n\n  if (typeof a === 'string') a = a.split(options.stringSeparator);\n  if (typeof o === 'string') o = o.split(options.stringSeparator);\n  if (typeof b === 'string') b = b.split(options.stringSeparator);\n\n  let results = [];\n  const regions = diff3MergeRegions(a, o, b);\n\n  let okBuffer = [];\n  function flushOk() {\n    if (okBuffer.length) {\n      results.push({ ok: okBuffer });\n    }\n    okBuffer = [];\n  }\n\n  function isFalseConflict(a, b) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n\n  regions.forEach(region =>  {\n    if (region.stable) {\n      okBuffer.push(...region.bufferContent);\n    } else {\n      if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) {\n        okBuffer.push(...region.aContent);\n      } else {\n        flushOk();\n        results.push({\n          conflict: {\n            a: region.aContent,\n            aIndex: region.aStart,\n            o: region.oContent,\n            oIndex: region.oStart,\n            b: region.bContent,\n            bIndex: region.bStart\n          }\n        });\n      }\n    }\n  });\n\n  flushOk();\n  return results;\n}\n\n\nfunction mergeDiff3(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const oSection = '|||||||' + (options.label.o ? ` ${options.label.o}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [oSection],\n        region.conflict.o,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction merge(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else if (region.conflict) {\n      conflict = true;\n      result = result.concat(\n        [aSection],\n        region.conflict.a,\n        [xSection],\n        region.conflict.b,\n        [bSection]\n      );\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\nfunction mergeDigIn(a, o, b, options) {\n  const defaults = {\n    excludeFalseConflicts: true,\n    stringSeparator: /\\s+/,\n    label: {}\n  };\n  options = Object.assign(defaults, options);\n\n  const aSection = '<<<<<<<' + (options.label.a ? ` ${options.label.a}` : '');\n  const xSection = '=======';\n  const bSection = '>>>>>>>' + (options.label.b ? ` ${options.label.b}` : '');\n\n  const regions = diff3Merge(a, o, b, options);\n  let conflict = false;\n  let result = [];\n\n  regions.forEach(region => {\n    if (region.ok) {\n      result = result.concat(region.ok);\n    } else {\n      const c = diffComm(region.conflict.a, region.conflict.b);\n      for (let j = 0; j < c.length; j++) {\n        let inner = c[j];\n        if (inner.common) {\n          result = result.concat(inner.common);\n        } else {\n          conflict = true;\n          result = result.concat(\n            [aSection],\n            inner.buffer1,\n            [xSection],\n            inner.buffer2,\n            [bSection]\n          );\n        }\n      }\n    }\n  });\n\n  return {\n    conflict: conflict,\n    result: result\n  };\n}\n\n\n// Applies a patch to a buffer.\n// Given buffer1 and buffer2, `patch(buffer1, diffPatch(buffer1, buffer2))` should give buffer2.\nfunction patch(buffer, patch) {\n  let result = [];\n  let currOffset = 0;\n\n  function advanceTo(targetOffset) {\n    while (currOffset < targetOffset) {\n      result.push(buffer[currOffset]);\n      currOffset++;\n    }\n  }\n\n  for (let chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) {\n    let chunk = patch[chunkIndex];\n    advanceTo(chunk.buffer1.offset);\n    for (let itemIndex = 0; itemIndex < chunk.buffer2.chunk.length; itemIndex++) {\n      result.push(chunk.buffer2.chunk[itemIndex]);\n    }\n    currOffset += chunk.buffer1.length;\n  }\n\n  advanceTo(buffer.length);\n  return result;\n}\n\n\n// Takes the output of diffPatch(), and removes extra information from it.\n// It can still be used by patch(), below, but can no longer be inverted.\nfunction stripPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: { offset: chunk.buffer1.offset, length: chunk.buffer1.length },\n    buffer2: { chunk: chunk.buffer2.chunk }\n  }));\n}\n\n\n// Takes the output of diffPatch(), and inverts the sense of it, so that it\n// can be applied to buffer2 to give buffer1 rather than the other way around.\nfunction invertPatch(patch) {\n  return patch.map(chunk => ({\n    buffer1: chunk.buffer2,\n    buffer2: chunk.buffer1\n  }));\n}\n"
  ],
  "mappings": "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",
  "debugId": "D476F1A6F1EBC8F364756E2164756E21",
  "names": []
}