@vscode/diff 0.0.2-7 → 0.0.2-9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
Binary file
|
package/dist/wire.js
CHANGED
|
@@ -1739,6 +1739,10 @@ function __wbg_get_imports() {
|
|
|
1739
1739
|
const ret = arg0.next();
|
|
1740
1740
|
return ret;
|
|
1741
1741
|
}, arguments); },
|
|
1742
|
+
__wbg_now_190933fa139cc119: function() {
|
|
1743
|
+
const ret = Date.now();
|
|
1744
|
+
return ret;
|
|
1745
|
+
},
|
|
1742
1746
|
__wbg_prototypesetcall_3249fc62a0fafa30: function(arg0, arg1, arg2) {
|
|
1743
1747
|
Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);
|
|
1744
1748
|
},
|
|
@@ -2048,7 +2052,7 @@ async function __wbg_init(module_or_path) {
|
|
|
2048
2052
|
}
|
|
2049
2053
|
|
|
2050
2054
|
if (module_or_path === undefined) {
|
|
2051
|
-
module_or_path = new URL(new URL('diff_wasm_bg-
|
|
2055
|
+
module_or_path = new URL(new URL('diff_wasm_bg-DHSF2iyw.wasm', import.meta.url).href);
|
|
2052
2056
|
}
|
|
2053
2057
|
const imports = __wbg_get_imports();
|
|
2054
2058
|
|
|
@@ -2094,7 +2098,7 @@ async function initWasm() {
|
|
|
2094
2098
|
return initPromise;
|
|
2095
2099
|
}
|
|
2096
2100
|
initPromise = (async () => {
|
|
2097
|
-
const wasmUrl = new URL(new URL('diff_wasm_bg-
|
|
2101
|
+
const wasmUrl = new URL(new URL('diff_wasm_bg-DHSF2iyw.wasm', import.meta.url).href);
|
|
2098
2102
|
// Node's undici fetch does not support file:// URLs, so read bytes ourselves.
|
|
2099
2103
|
let source = wasmUrl;
|
|
2100
2104
|
if (typeof process !== 'undefined' && process.versions?.node) {
|
package/dist/wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.js","sources":["../src/diff/core/offsetRange.ts","../src/diff/algorithms/diffAlgorithm.ts","../src/diff/algorithms/dynamicProgrammingDiffing.ts","../src/diff/algorithms/myersDiffAlgorithm.ts","../src/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts","../src/diff/defaultLinesDiffComputer/lineSequence.ts","../src/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts","../src/diff/defaultLinesDiffComputer/rangeMapping.ts","../src/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","../out/pkg/diff_wasm.js","../src/diff/wasm/loader.ts","../src/diff/worker/wire.ts"],"sourcesContent":["/**\n * A range of offsets (0-based).\n */\nexport class OffsetRange {\n\tpublic static ofLength(length: number): OffsetRange {\n\t\treturn new OffsetRange(0, length);\n\t}\n\n\tpublic static ofStartAndLength(start: number, length: number): OffsetRange {\n\t\treturn new OffsetRange(start, start + length);\n\t}\n\n\tconstructor(\n\t\tpublic readonly start: number,\n\t\tpublic readonly endExclusive: number\n\t) {\n\t\tif (start > endExclusive) {\n\t\t\tthrow new Error(`Invalid range: [${start}, ${endExclusive})`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.start === this.endExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endExclusive - this.start;\n\t}\n\n\tdelta(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive + offset);\n\t}\n\n\tdeltaStart(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive);\n\t}\n\n\tdeltaEnd(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start, this.endExclusive + offset);\n\t}\n\n\tequals(other: OffsetRange): boolean {\n\t\treturn this.start === other.start && this.endExclusive === other.endExclusive;\n\t}\n\n\tcontainsRange(other: OffsetRange): boolean {\n\t\treturn this.start <= other.start && other.endExclusive <= this.endExclusive;\n\t}\n\n\tcontains(offset: number): boolean {\n\t\treturn this.start <= offset && offset < this.endExclusive;\n\t}\n\n\tjoin(other: OffsetRange): OffsetRange {\n\t\treturn new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n\t}\n\n\tintersect(other: OffsetRange): OffsetRange | undefined {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\tif (start <= end) {\n\t\t\treturn new OffsetRange(start, end);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tintersects(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start < end;\n\t}\n\n\tintersectsOrTouches(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start <= end;\n\t}\n\n\tslice<T>(arr: readonly T[]): T[] {\n\t\treturn arr.slice(this.start, this.endExclusive);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.start}, ${this.endExclusive})`;\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\n\n/**\n * A sequence that can be diffed.\n */\nexport interface ISequence {\n\tgetElement(offset: number): number;\n\treadonly length: number;\n\n\t/**\n\t * The higher the score, the better that offset can be used to split the sequence.\n\t * Used to optimize insertions. Must not be negative.\n\t */\n\tgetBoundaryScore?(length: number): number;\n\n\t/**\n\t * For line sequences, getElement returns a number representing trimmed lines.\n\t * This checks equality for the original lines.\n\t * It prevents shifting to less matching lines.\n\t */\n\tisStronglyEqual(offset1: number, offset2: number): boolean;\n}\n\n/**\n * Timeout interface for limiting computation time.\n */\nexport interface ITimeout {\n\tisValid(): boolean;\n}\n\nexport class InfiniteTimeout implements ITimeout {\n\tpublic static readonly instance = new InfiniteTimeout();\n\n\tisValid(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport class DateTimeout implements ITimeout {\n\tprivate readonly startTime = Date.now();\n\tprivate valid = true;\n\n\tconstructor(private timeout: number) {\n\t\tif (timeout <= 0) {\n\t\t\tthrow new Error('timeout must be positive');\n\t\t}\n\t}\n\n\tisValid(): boolean {\n\t\tconst valid = Date.now() - this.startTime < this.timeout;\n\t\tif (!valid && this.valid) {\n\t\t\tthis.valid = false;\n\t\t}\n\t\treturn this.valid;\n\t}\n}\n\n/**\n * Represents an offset pair for two sequences.\n */\nexport class OffsetPair {\n\tpublic static readonly zero = new OffsetPair(0, 0);\n\tpublic static readonly max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\n\tconstructor(\n\t\tpublic readonly offset1: number,\n\t\tpublic readonly offset2: number\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.offset1} <-> ${this.offset2}`;\n\t}\n\n\tdelta(offset: number): OffsetPair {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n\t}\n\n\tequals(other: OffsetPair): boolean {\n\t\treturn this.offset1 === other.offset1 && this.offset2 === other.offset2;\n\t}\n}\n\n/**\n * Represents a diff between two sequences.\n */\nexport class SequenceDiff {\n\tpublic static invert(sequenceDiffs: SequenceDiff[], doc1Length: number): SequenceDiff[] {\n\t\tconst result: SequenceDiff[] = [];\n\t\tforEachAdjacent(sequenceDiffs, (a, b) => {\n\t\t\tresult.push(SequenceDiff.fromOffsetPairs(\n\t\t\t\ta ? a.getEndExclusives() : OffsetPair.zero,\n\t\t\t\tb ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)\n\t\t\t));\n\t\t});\n\t\treturn result;\n\t}\n\n\tpublic static fromOffsetPairs(start: OffsetPair, endExclusive: OffsetPair): SequenceDiff {\n\t\treturn new SequenceDiff(\n\t\t\tnew OffsetRange(start.offset1, endExclusive.offset1),\n\t\t\tnew OffsetRange(start.offset2, endExclusive.offset2)\n\t\t);\n\t}\n\n\tpublic static assertSorted(sequenceDiffs: SequenceDiff[]): void {\n\t\tlet last: SequenceDiff | undefined = undefined;\n\t\tfor (const cur of sequenceDiffs) {\n\t\t\tif (last) {\n\t\t\t\tif (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {\n\t\t\t\t\tthrow new Error('Sequence diffs must be sorted');\n\t\t\t\t}\n\t\t\t}\n\t\t\tlast = cur;\n\t\t}\n\t}\n\n\tconstructor(\n\t\tpublic readonly seq1Range: OffsetRange,\n\t\tpublic readonly seq2Range: OffsetRange\n\t) {}\n\n\tswap(): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq2Range, this.seq1Range);\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.seq1Range} <-> ${this.seq2Range}`;\n\t}\n\n\tjoin(other: SequenceDiff): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n\t}\n\n\tdelta(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n\t}\n\n\tdeltaStart(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n\t}\n\n\tdeltaEnd(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n\t}\n\n\tintersectsOrTouches(other: SequenceDiff): boolean {\n\t\treturn this.seq1Range.intersectsOrTouches(other.seq1Range) || this.seq2Range.intersectsOrTouches(other.seq2Range);\n\t}\n\n\tintersect(other: SequenceDiff): SequenceDiff | undefined {\n\t\tconst i1 = this.seq1Range.intersect(other.seq1Range);\n\t\tconst i2 = this.seq2Range.intersect(other.seq2Range);\n\t\tif (!i1 || !i2) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new SequenceDiff(i1, i2);\n\t}\n\n\tgetStarts(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n\t}\n\n\tgetEndExclusives(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n\t}\n}\n\n/**\n * Result of a diff algorithm computation.\n */\nexport class DiffAlgorithmResult {\n\tstatic trivial(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n\t}\n\n\tstatic trivialTimedOut(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n\t}\n\n\tconstructor(\n\t\tpublic readonly diffs: SequenceDiff[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * A synchronous diff algorithm.\n */\nexport interface IDiffAlgorithm {\n\tcompute(sequence1: ISequence, sequence2: ISequence, timeout?: ITimeout): DiffAlgorithmResult;\n}\n\n// Helper function for iterating with neighbors\nfunction forEachAdjacent<T>(items: T[], callback: (prev: T | undefined, current: T | undefined) => void): void {\n\tlet prev: T | undefined = undefined;\n\tfor (const item of items) {\n\t\tcallback(prev, item);\n\t\tprev = item;\n\t}\n\tcallback(prev, undefined);\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * A 2D array implementation.\n */\nexport class Array2D<T> {\n\tprivate readonly array: T[] = [];\n\n\tconstructor(\n\t\tpublic readonly width: number,\n\t\tpublic readonly height: number\n\t) {\n\t\tthis.array = new Array<T>(width * height);\n\t}\n\n\tget(x: number, y: number): T {\n\t\treturn this.array[x + y * this.width];\n\t}\n\n\tset(x: number, y: number, value: T): void {\n\t\tthis.array[x + y * this.width] = value;\n\t}\n}\n\n/**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n */\nexport class DynamicProgrammingDiffing implements IDiffAlgorithm {\n\tcompute(\n\t\tsequence1: ISequence,\n\t\tsequence2: ISequence,\n\t\ttimeout: ITimeout = InfiniteTimeout.instance,\n\t\tequalityScore?: (offset1: number, offset2: number) => number\n\t): DiffAlgorithmResult {\n\t\tif (sequence1.length === 0 || sequence2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(sequence1, sequence2);\n\t\t}\n\n\t\t/**\n\t\t * lcsLengths.get(i, j): Length of the longest common subsequence of \n\t\t * sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n\t\t */\n\t\tconst lcsLengths = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst directions = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst lengths = new Array2D<number>(sequence1.length, sequence2.length);\n\n\t\t// Initialize lcsLengths\n\t\tfor (let s1 = 0; s1 < sequence1.length; s1++) {\n\t\t\tfor (let s2 = 0; s2 < sequence2.length; s2++) {\n\t\t\t\tif (!timeout.isValid()) {\n\t\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n\t\t\t\t}\n\n\t\t\t\tconst horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n\t\t\t\tconst verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n\n\t\t\t\tlet extendedSeqScore: number;\n\t\t\t\tif (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n\t\t\t\t\tif (s1 === 0 || s2 === 0) {\n\t\t\t\t\t\textendedSeqScore = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\textendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) {\n\t\t\t\t\t\t// Prefer consecutive diagonals\n\t\t\t\t\t\textendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\textendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1);\n\t\t\t\t} else {\n\t\t\t\t\textendedSeqScore = -1;\n\t\t\t\t}\n\n\t\t\t\tconst newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n\n\t\t\t\tif (newValue === extendedSeqScore) {\n\t\t\t\t\t// Prefer diagonals\n\t\t\t\t\tconst prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n\t\t\t\t\tlengths.set(s1, s2, prevLen + 1);\n\t\t\t\t\tdirections.set(s1, s2, 3);\n\t\t\t\t} else if (newValue === horizontalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 1);\n\t\t\t\t} else if (newValue === verticalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 2);\n\t\t\t\t}\n\n\t\t\t\tlcsLengths.set(s1, s2, newValue);\n\t\t\t}\n\t\t}\n\n\t\t// Backtracking\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = sequence1.length;\n\t\tlet lastAligningPosS2: number = sequence2.length;\n\n\t\tfunction reportDecreasingAligningPositions(s1: number, s2: number): void {\n\t\t\tif (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(s1 + 1, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(s2 + 1, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastAligningPosS1 = s1;\n\t\t\tlastAligningPosS2 = s2;\n\t\t}\n\n\t\tlet s1 = sequence1.length - 1;\n\t\tlet s2 = sequence2.length - 1;\n\t\twhile (s1 >= 0 && s2 >= 0) {\n\t\t\tif (directions.get(s1, s2) === 3) {\n\t\t\t\treportDecreasingAligningPositions(s1, s2);\n\t\t\t\ts1--;\n\t\t\t\ts2--;\n\t\t\t} else {\n\t\t\t\tif (directions.get(s1, s2) === 1) {\n\t\t\t\t\ts1--;\n\t\t\t\t} else {\n\t\t\t\t\ts2--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treportDecreasingAligningPositions(-1, -1);\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n */\nexport class MyersDiffAlgorithm implements IDiffAlgorithm {\n\tcompute(seq1: ISequence, seq2: ISequence, timeout: ITimeout = InfiniteTimeout.instance): DiffAlgorithmResult {\n\t\t// Common special cases - early return improves performance dramatically\n\t\tif (seq1.length === 0 || seq2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(seq1, seq2);\n\t\t}\n\n\t\tconst seqX = seq1; // Text on the x axis\n\t\tconst seqY = seq2; // Text on the y axis\n\n\t\tfunction getXAfterSnake(x: number, y: number): number {\n\t\t\twhile (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n\t\t\t\tx++;\n\t\t\t\ty++;\n\t\t\t}\n\t\t\treturn x;\n\t\t}\n\n\t\tlet d = 0;\n\t\t// V[k]: X value of longest d-line that ends in diagonal k.\n\t\t// d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.\n\t\t// diagonal k: Set of points (x,y) with x-y = k.\n\t\tconst V = new FastInt32Array();\n\t\tV.set(0, getXAfterSnake(0, 0));\n\n\t\tconst paths = new FastArrayNegativeIndices<SnakePath | null>();\n\t\tpaths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n\n\t\tlet k = 0;\n\n\t\tloop: while (true) {\n\t\t\td++;\n\t\t\tif (!timeout.isValid()) {\n\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n\t\t\t}\n\t\t\t// The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result.\n\t\t\tconst lowerBound = -Math.min(d, seqY.length + (d % 2));\n\t\t\tconst upperBound = Math.min(d, seqX.length + (d % 2));\n\t\t\tfor (k = lowerBound; k <= upperBound; k += 2) {\n\t\t\t\t// We can use the X values of (d-1)-lines to compute X value of the longest d-lines.\n\t\t\t\tconst maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // Vertical non-diagonal (add symbol in seqX)\n\t\t\t\tconst maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // Horizontal non-diagonal (delete symbol in seqX)\n\t\t\t\tconst x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n\t\t\t\tconst y = x - k;\n\t\t\t\tif (x > seqX.length || y > seqY.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst newMaxX = getXAfterSnake(x, y);\n\t\t\t\tV.set(k, newMaxX);\n\t\t\t\tconst lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n\t\t\t\tpaths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n\n\t\t\t\tif (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {\n\t\t\t\t\tbreak loop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet path = paths.get(k);\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = seqX.length;\n\t\tlet lastAligningPosS2: number = seqY.length;\n\n\t\twhile (true) {\n\t\t\tconst endX = path ? path.x + path.length : 0;\n\t\t\tconst endY = path ? path.y + path.length : 0;\n\n\t\t\tif (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(endX, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(endY, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tif (!path) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastAligningPosS1 = path.x;\n\t\t\tlastAligningPosS2 = path.y;\n\n\t\t\tpath = path.prev;\n\t\t}\n\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n\nclass SnakePath {\n\tconstructor(\n\t\tpublic readonly prev: SnakePath | null,\n\t\tpublic readonly x: number,\n\t\tpublic readonly y: number,\n\t\tpublic readonly length: number\n\t) { }\n}\n\n/**\n * An array that supports fast negative indices.\n */\nclass FastInt32Array {\n\tprivate positiveArr: Int32Array = new Int32Array(10);\n\tprivate negativeArr: Int32Array = new Int32Array(10);\n\n\tget(idx: number): number {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: number): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tif (idx >= this.negativeArr.length) {\n\t\t\t\tconst arr = this.negativeArr;\n\t\t\t\tthis.negativeArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.negativeArr.set(arr);\n\t\t\t}\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tif (idx >= this.positiveArr.length) {\n\t\t\t\tconst arr = this.positiveArr;\n\t\t\t\tthis.positiveArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.positiveArr.set(arr);\n\t\t\t}\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n\n/**\n * An array that supports fast negative indices for objects.\n */\nclass FastArrayNegativeIndices<T> {\n\tprivate readonly positiveArr: T[] = [];\n\tprivate readonly negativeArr: T[] = [];\n\n\tget(idx: number): T {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: T): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence, OffsetPair, SequenceDiff } from '../algorithms/diffAlgorithm.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet result = sequenceDiffs;\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\t// Sometimes, calling this function twice improves the result.\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\tresult = shiftSequenceDiffs(sequence1, sequence2, result);\n\treturn result;\n}\n\n/**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\nfunction joinSequenceDiffsByShifting(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (sequenceDiffs.length === 0) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tconst result: SequenceDiff[] = [];\n\tresult.push(sequenceDiffs[0]);\n\n\t// First move them all to the left as much as possible and join them if possible\n\tfor (let i = 1; i < sequenceDiffs.length; i++) {\n\t\tconst prevResult = result[result.length - 1];\n\t\tlet cur = sequenceDiffs[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 1; d <= length; d++) {\n\t\t\t\tif (\n\t\t\t\t\tsequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) ||\n\t\t\t\t\tsequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\td--;\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[result.length - 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length),\n\t\t\t\t\tnew OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcur = cur.delta(-d);\n\t\t}\n\n\t\tresult.push(cur);\n\t}\n\n\tconst result2: SequenceDiff[] = [];\n\t// Then move them all to the right and join them again if possible\n\tfor (let i = 0; i < result.length - 1; i++) {\n\t\tconst nextResult = result[i + 1];\n\t\tlet cur = result[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 0; d < length; d++) {\n\t\t\t\tif (\n\t\t\t\t\t!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) ||\n\t\t\t\t\t!sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[i + 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive),\n\t\t\t\t\tnew OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (d > 0) {\n\t\t\t\tcur = cur.delta(d);\n\t\t\t}\n\t\t}\n\n\t\tresult2.push(cur);\n\t}\n\n\tif (result.length > 0) {\n\t\tresult2.push(result[result.length - 1]);\n\t}\n\n\treturn result2;\n}\n\nfunction shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tfor (let i = 0; i < sequenceDiffs.length; i++) {\n\t\tconst prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined);\n\t\tconst diff = sequenceDiffs[i];\n\t\tconst nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined);\n\n\t\tconst seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n\t\tconst seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n\n\t\tif (diff.seq1Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n\t\t} else if (diff.seq2Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n\t\t}\n\t}\n\n\treturn sequenceDiffs;\n}\n\nfunction shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq1ValidRange: OffsetRange, seq2ValidRange: OffsetRange): SequenceDiff {\n\tconst maxShiftLimit = 100; // To prevent performance issues\n\n\tlet deltaBefore = 1;\n\twhile (\n\t\tdiff.seq1Range.start - deltaBefore >= seq1ValidRange.start &&\n\t\tdiff.seq2Range.start - deltaBefore >= seq2ValidRange.start &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit\n\t) {\n\t\tdeltaBefore++;\n\t}\n\tdeltaBefore--;\n\n\tlet deltaAfter = 0;\n\twhile (\n\t\tdiff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive &&\n\t\tdiff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit\n\t) {\n\t\tdeltaAfter++;\n\t}\n\n\tif (deltaBefore === 0 && deltaAfter === 0) {\n\t\treturn diff;\n\t}\n\n\tlet bestDelta = 0;\n\tlet bestScore = -1;\n\t// Find best scored delta\n\tfor (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n\t\tconst seq2OffsetStart = diff.seq2Range.start + delta;\n\t\tconst seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n\t\tconst seq1Offset = diff.seq1Range.start + delta;\n\n\t\tconst score = sequence1.getBoundaryScore!(seq1Offset) + sequence2.getBoundaryScore!(seq2OffsetStart) + sequence2.getBoundaryScore!(seq2OffsetEndExclusive);\n\t\tif (score > bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestDelta = delta;\n\t\t}\n\t}\n\n\treturn diff.delta(bestDelta);\n}\n\nexport function removeShortMatches(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\tfor (const s of sequenceDiffs) {\n\t\tconst last = result[result.length - 1];\n\t\tif (!last) {\n\t\t\tresult.push(s);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {\n\t\t\tresult[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n\t\t} else {\n\t\t\tresult.push(s);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function extendDiffsToEntireWordIfAppropriate(\n\tsequence1: LinesSliceCharSequence,\n\tsequence2: LinesSliceCharSequence,\n\tsequenceDiffs: SequenceDiff[],\n\tfindParent: (seq: LinesSliceCharSequence, idx: number) => OffsetRange | undefined,\n\tforce: boolean = false\n): SequenceDiff[] {\n\tconst equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n\n\tconst additional: SequenceDiff[] = [];\n\n\tlet lastPoint = new OffsetPair(0, 0);\n\n\tfunction scanWord(pair: OffsetPair, equalMapping: SequenceDiff): void {\n\t\tif (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst w1 = findParent(sequence1, pair.offset1);\n\t\tconst w2 = findParent(sequence2, pair.offset2);\n\t\tif (!w1 || !w2) {\n\t\t\treturn;\n\t\t}\n\t\tlet w = new SequenceDiff(w1, w2);\n\t\tconst equalPart = w.intersect(equalMapping)!;\n\n\t\tlet equalChars1 = equalPart.seq1Range.length;\n\t\tlet equalChars2 = equalPart.seq2Range.length;\n\n\t\twhile (equalMappings.length > 0) {\n\t\t\tconst next = equalMappings[0];\n\t\t\tconst intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);\n\t\t\tif (!intersects) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst v1 = findParent(sequence1, next.seq1Range.start);\n\t\t\tconst v2 = findParent(sequence2, next.seq2Range.start);\n\t\t\tconst v = new SequenceDiff(v1!, v2!);\n\t\t\tconst equalPartV = v.intersect(next)!;\n\n\t\t\tequalChars1 += equalPartV.seq1Range.length;\n\t\t\tequalChars2 += equalPartV.seq2Range.length;\n\n\t\t\tw = w.join(v);\n\n\t\t\tif (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {\n\t\t\t\tequalMappings.shift();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ((force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length) || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {\n\t\t\tadditional.push(w);\n\t\t}\n\n\t\tlastPoint = w.getEndExclusives();\n\t}\n\n\twhile (equalMappings.length > 0) {\n\t\tconst next = equalMappings.shift()!;\n\t\tif (next.seq1Range.isEmpty) {\n\t\t\tcontinue;\n\t\t}\n\t\tscanWord(next.getStarts(), next);\n\t\tscanWord(next.getEndExclusives().delta(-1), next);\n\t}\n\n\tconst merged = mergeSequenceDiffs(sequenceDiffs, additional);\n\treturn merged;\n}\n\nfunction mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\n\twhile (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n\t\tconst sd1 = sequenceDiffs1[0];\n\t\tconst sd2 = sequenceDiffs2[0];\n\n\t\tlet next: SequenceDiff;\n\t\tif (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {\n\t\t\tnext = sequenceDiffs1.shift()!;\n\t\t} else {\n\t\t\tnext = sequenceDiffs2.shift()!;\n\t\t}\n\n\t\tif (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {\n\t\t\tresult[result.length - 1] = result[result.length - 1].join(next);\n\t\t} else {\n\t\t\tresult.push(next);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function removeVeryShortMatchingLinesBetweenDiffs(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange);\n\t\t\t\tconst unchangedTextWithoutWs = unchangedText.replace(/\\s/g, '');\n\t\t\t\tif (unchangedTextWithoutWs.length <= 4\n\t\t\t\t\t&& (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\treturn diffs;\n}\n\nexport function removeVeryShortMatchingTextBetweenLongDiffs(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\n\t\t\t\tconst unchangedLineCount = sequence1.countLinesIn(unchangedRange);\n\t\t\t\tif (unchangedLineCount > 5 || unchangedRange.length > 500) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange).trim();\n\t\t\t\tif (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n\t\t\t\tconst beforeSeq1Length = before.seq1Range.length;\n\t\t\t\tconst beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n\t\t\t\tconst beforeSeq2Length = before.seq2Range.length;\n\n\t\t\t\tconst afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n\t\t\t\tconst afterSeq1Length = after.seq1Range.length;\n\t\t\t\tconst afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n\t\t\t\tconst afterSeq2Length = after.seq2Range.length;\n\n\t\t\t\tconst max = 2 * 40 + 50;\n\t\t\t\tfunction cap(v: number): number {\n\t\t\t\t\treturn Math.min(v, max);\n\t\t\t\t}\n\n\t\t\t\tif (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5)\n\t\t\t\t\t+ Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > ((max ** 1.5) ** 1.5) * 1.3) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\tconst newDiffs: SequenceDiff[] = [];\n\n\t// Remove short suffixes/prefixes\n\tforEachWithNeighbors(diffs, (prev, cur, next) => {\n\t\tlet newDiff = cur;\n\n\t\tfunction shouldMarkAsChanged(text: string): boolean {\n\t\t\treturn text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n\t\t}\n\n\t\tconst fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n\t\tconst prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n\t\tif (shouldMarkAsChanged(prefix)) {\n\t\t\tnewDiff = newDiff.deltaStart(-prefix.length);\n\t\t}\n\t\tconst suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n\t\tif (shouldMarkAsChanged(suffix)) {\n\t\t\tnewDiff = newDiff.deltaEnd(suffix.length);\n\t\t}\n\n\t\tconst availableSpace = SequenceDiff.fromOffsetPairs(\n\t\t\tprev ? prev.getEndExclusives() : OffsetPair.zero,\n\t\t\tnext ? next.getStarts() : OffsetPair.max\n\t\t);\n\t\tconst intersected = newDiff.intersect(availableSpace)!;\n\t\tif (newDiffs.length > 0 && intersected.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {\n\t\t\tnewDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(intersected);\n\t\t} else {\n\t\t\tnewDiffs.push(intersected);\n\t\t}\n\t});\n\n\treturn newDiffs;\n}\n\nfunction forEachWithNeighbors<T>(items: T[], callback: (prev: T | undefined, cur: T, next: T | undefined) => void): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tcallback(items[i - 1], items[i], items[i + 1]);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tSpace: 32,\n\tTab: 9,\n};\n\nexport class LineSequence implements ISequence {\n\tconstructor(\n\t\tprivate readonly trimmedHash: number[],\n\t\tprivate readonly lines: string[]\n\t) {}\n\n\tgetElement(offset: number): number {\n\t\treturn this.trimmedHash[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.trimmedHash.length;\n\t}\n\n\tgetBoundaryScore(length: number): number {\n\t\tconst indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);\n\t\tconst indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);\n\t\treturn 1000 - (indentationBefore + indentationAfter);\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.lines.slice(range.start, range.endExclusive).join('\\n');\n\t}\n\n\tisStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.lines[offset1] === this.lines[offset2];\n\t}\n}\n\nfunction getIndentation(str: string): number {\n\tlet i = 0;\n\twhile (i < str.length && (str.charCodeAt(i) === CharCode.Space || str.charCodeAt(i) === CharCode.Tab)) {\n\t\ti++;\n\t}\n\treturn i;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tLineFeed: 10,\n\tCarriageReturn: 13,\n\tSpace: 32,\n\tTab: 9,\n\ta: 97,\n\tz: 122,\n\tA: 65,\n\tZ: 90,\n\tDigit0: 48,\n\tDigit9: 57,\n\tComma: 44,\n\tSemicolon: 59,\n};\n\nfunction isSpace(charCode: number): boolean {\n\treturn charCode === CharCode.Space || charCode === CharCode.Tab;\n}\n\n/**\n * Represents a range in terms of lines and columns.\n */\nexport interface IRange {\n\treadonly startLineNumber: number;\n\treadonly startColumn: number;\n\treadonly endLineNumber: number;\n\treadonly endColumn: number;\n}\n\nexport class Range implements IRange {\n\tpublic readonly startLineNumber: number;\n\tpublic readonly startColumn: number;\n\tpublic readonly endLineNumber: number;\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.startColumn = startColumn;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.endColumn = endColumn;\n\t}\n\n\tstatic fromPositions(start: Position, end: Position): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n}\n\nexport class Position {\n\tconstructor(\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly column: number\n\t) {}\n\n\tisBefore(other: Position): boolean {\n\t\tif (this.lineNumber < other.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (other.lineNumber < this.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.column < other.column;\n\t}\n}\n\nexport class LinesSliceCharSequence implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstElementOffsetByLineIdx: number[] = [];\n\tprivate readonly lineStartOffsets: number[] = [];\n\tprivate readonly trimmedWsLengthsByLineIdx: number[] = [];\n\tprivate readonly _range: Range;\n\n\tconstructor(\n\t\tpublic readonly lines: string[],\n\t\trange: Range,\n\t\tpublic readonly considerWhitespaceChanges: boolean\n\t) {\n\t\tthis._range = range;\n\t\tthis.firstElementOffsetByLineIdx.push(0);\n\t\tfor (let lineNumber = this._range.startLineNumber; lineNumber <= this._range.endLineNumber; lineNumber++) {\n\t\t\tlet line = lines[lineNumber - 1];\n\t\t\tlet lineStartOffset = 0;\n\t\t\tif (lineNumber === this._range.startLineNumber && this._range.startColumn > 1) {\n\t\t\t\tlineStartOffset = this._range.startColumn - 1;\n\t\t\t\tline = line.substring(lineStartOffset);\n\t\t\t}\n\t\t\tthis.lineStartOffsets.push(lineStartOffset);\n\n\t\t\tlet trimmedWsLength = 0;\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\tconst trimmedStartLine = line.trimStart();\n\t\t\t\ttrimmedWsLength = line.length - trimmedStartLine.length;\n\t\t\t\tline = trimmedStartLine.trimEnd();\n\t\t\t}\n\t\t\tthis.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n\n\t\t\tconst lineLength = lineNumber === this._range.endLineNumber ? Math.min(this._range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n\t\t\tfor (let i = 0; i < lineLength; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\n\t\t\tif (lineNumber < this._range.endLineNumber) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t\tthis.firstElementOffsetByLineIdx.push(this.elements.length);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoString(): string {\n\t\treturn `Slice: \"${this.text}\"`;\n\t}\n\n\tget text(): string {\n\t\treturn this.getText(new OffsetRange(0, this.length));\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.elements.slice(range.start, range.endExclusive).map(e => String.fromCharCode(e)).join('');\n\t}\n\n\tgetElement(offset: number): number {\n\t\treturn this.elements[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.elements.length;\n\t}\n\n\tpublic getBoundaryScore(length: number): number {\n\t\tconst prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n\t\tconst nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakCR && nextCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// don't break between \\r and \\n\n\t\t\treturn 0;\n\t\t}\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// prefer the linebreak before the change\n\t\t\treturn 150;\n\t\t}\n\n\t\tlet score = 0;\n\t\tif (prevCategory !== nextCategory) {\n\t\t\tscore += 10;\n\t\t\tif (prevCategory === CharBoundaryCategory.WordLower && nextCategory === CharBoundaryCategory.WordUpper) {\n\t\t\t\tscore += 1;\n\t\t\t}\n\t\t}\n\n\t\tscore += getCategoryBoundaryScore(prevCategory);\n\t\tscore += getCategoryBoundaryScore(nextCategory);\n\n\t\treturn score;\n\t}\n\n\tpublic translateOffset(offset: number, preference: 'left' | 'right' = 'right'): Position {\n\t\tconst i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n\t\tconst lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n\t\treturn new Position(\n\t\t\tthis._range.startLineNumber + i,\n\t\t\t1 + this.lineStartOffsets[i] + lineOffset + ((lineOffset === 0 && preference === 'left') ? 0 : this.trimmedWsLengthsByLineIdx[i])\n\t\t);\n\t}\n\n\tpublic translateRange(range: OffsetRange): Range {\n\t\tconst pos1 = this.translateOffset(range.start, 'right');\n\t\tconst pos2 = this.translateOffset(range.endExclusive, 'left');\n\t\tif (pos2.isBefore(pos1)) {\n\t\t\treturn Range.fromPositions(pos2, pos2);\n\t\t}\n\t\treturn Range.fromPositions(pos1, pos2);\n\t}\n\n\t/**\n\t * Finds the word that contains the character at the given offset\n\t */\n\tpublic findWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\t/** fooBar has the two sub-words foo and bar */\n\tpublic findSubWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\tpublic countLinesIn(range: OffsetRange): number {\n\t\treturn this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n\t}\n\n\tpublic isStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.elements[offset1] === this.elements[offset2];\n\t}\n\n\tpublic extendToFullLines(range: OffsetRange): OffsetRange {\n\t\tconst start = findLastMonotonous(this.firstElementOffsetByLineIdx, x => x <= range.start) ?? 0;\n\t\tconst end = findFirstMonotonous(this.firstElementOffsetByLineIdx, x => range.endExclusive <= x) ?? this.elements.length;\n\t\treturn new OffsetRange(start, end);\n\t}\n}\n\nfunction isWordChar(charCode: number): boolean {\n\treturn charCode >= CharCode.a && charCode <= CharCode.z\n\t\t|| charCode >= CharCode.A && charCode <= CharCode.Z\n\t\t|| charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9;\n}\n\nfunction isUpperCase(charCode: number): boolean {\n\treturn charCode >= CharCode.A && charCode <= CharCode.Z;\n}\n\nconst enum CharBoundaryCategory {\n\tWordLower,\n\tWordUpper,\n\tWordNumber,\n\tEnd,\n\tOther,\n\tSeparator,\n\tSpace,\n\tLineBreakCR,\n\tLineBreakLF,\n}\n\nconst categoryScore: Record<CharBoundaryCategory, number> = {\n\t[CharBoundaryCategory.WordLower]: 0,\n\t[CharBoundaryCategory.WordUpper]: 0,\n\t[CharBoundaryCategory.WordNumber]: 0,\n\t[CharBoundaryCategory.End]: 10,\n\t[CharBoundaryCategory.Other]: 2,\n\t[CharBoundaryCategory.Separator]: 30,\n\t[CharBoundaryCategory.Space]: 3,\n\t[CharBoundaryCategory.LineBreakCR]: 10,\n\t[CharBoundaryCategory.LineBreakLF]: 10,\n};\n\nfunction getCategoryBoundaryScore(category: CharBoundaryCategory): number {\n\treturn categoryScore[category];\n}\n\nfunction getCategory(charCode: number): CharBoundaryCategory {\n\tif (charCode === CharCode.LineFeed) {\n\t\treturn CharBoundaryCategory.LineBreakLF;\n\t} else if (charCode === CharCode.CarriageReturn) {\n\t\treturn CharBoundaryCategory.LineBreakCR;\n\t} else if (isSpace(charCode)) {\n\t\treturn CharBoundaryCategory.Space;\n\t} else if (charCode >= CharCode.a && charCode <= CharCode.z) {\n\t\treturn CharBoundaryCategory.WordLower;\n\t} else if (charCode >= CharCode.A && charCode <= CharCode.Z) {\n\t\treturn CharBoundaryCategory.WordUpper;\n\t} else if (charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9) {\n\t\treturn CharBoundaryCategory.WordNumber;\n\t} else if (charCode === -1) {\n\t\treturn CharBoundaryCategory.End;\n\t} else if (charCode === CharCode.Comma || charCode === CharCode.Semicolon) {\n\t\treturn CharBoundaryCategory.Separator;\n\t} else {\n\t\treturn CharBoundaryCategory.Other;\n\t}\n}\n\n// Binary search helpers\nfunction findLastIdxMonotonous<T>(array: T[], predicate: (item: T) => boolean): number {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid - 1;\n\t\t}\n\t}\n\treturn high;\n}\n\nfunction findLastMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tconst idx = findLastIdxMonotonous(array, predicate);\n\treturn idx >= 0 ? array[idx] : undefined;\n}\n\nfunction findFirstMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\tlow = mid + 1;\n\t\t}\n\t}\n\treturn low < array.length ? array[low] : undefined;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * A range of lines (1-based, end is exclusive).\n */\nexport class LineRange {\n\tconstructor(\n\t\tpublic readonly startLineNumber: number,\n\t\tpublic readonly endLineNumberExclusive: number\n\t) {\n\t\tif (startLineNumber > endLineNumberExclusive) {\n\t\t\tthrow new Error(`Invalid range: ${startLineNumber} > ${endLineNumberExclusive}`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumberExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endLineNumberExclusive - this.startLineNumber;\n\t}\n\n\tjoin(other: LineRange): LineRange {\n\t\treturn new LineRange(\n\t\t\tMath.min(this.startLineNumber, other.startLineNumber),\n\t\t\tMath.max(this.endLineNumberExclusive, other.endLineNumberExclusive)\n\t\t);\n\t}\n\n\tintersectsOrTouches(other: LineRange): boolean {\n\t\treturn this.startLineNumber <= other.endLineNumberExclusive\n\t\t\t&& other.startLineNumber <= this.endLineNumberExclusive;\n\t}\n\n\ttoOffsetRange(): OffsetRange {\n\t\treturn new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.startLineNumber}, ${this.endLineNumberExclusive})`;\n\t}\n}\n\n/**\n * A mapping between two ranges.\n */\nexport class RangeMapping {\n\tconstructor(\n\t\tpublic readonly originalRange: Range,\n\t\tpublic readonly modifiedRange: Range\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${rangeToString(this.originalRange)} <-> ${rangeToString(this.modifiedRange)}`;\n\t}\n\n\tstatic assertSorted(rangeMappings: RangeMapping[]): void {\n\t\tfor (let i = 1; i < rangeMappings.length; i++) {\n\t\t\tconst prev = rangeMappings[i - 1];\n\t\t\tconst cur = rangeMappings[i];\n\t\t\tif (!(prev.originalRange.endLineNumber <= cur.originalRange.startLineNumber ||\n\t\t\t\t(prev.originalRange.endLineNumber === cur.originalRange.startLineNumber && prev.originalRange.endColumn <= cur.originalRange.startColumn))) {\n\t\t\t\tthrow new Error('RangeMappings must be sorted');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction rangeToString(range: Range): string {\n\treturn `(${range.startLineNumber}:${range.startColumn})-(${range.endLineNumber}:${range.endColumn})`;\n}\n\n/**\n * A mapping between two line ranges.\n */\nexport class LineRangeMapping {\n\tconstructor(\n\t\tpublic readonly original: LineRange,\n\t\tpublic readonly modified: LineRange\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.original} <-> ${this.modified}`;\n\t}\n\n\t/**\n\t * This method assumes that the LineRangeMapping describes a valid diff!\n\t * I.e. if one range is empty, the other range cannot be the entire document.\n\t * It avoids various problems when the line range points to non-existing line-numbers.\n\t*/\n\ttoRangeMapping2(originalLines: string[], modifiedLines: string[]): RangeMapping {\n\t\tconst isValidLineNumber = (lineNumber: number, lines: string[]): boolean => {\n\t\t\treturn lineNumber >= 1 && lineNumber <= lines.length;\n\t\t};\n\n\t\tconst normalizePosition = (lineNumber: number, column: number, lines: string[]): Position => {\n\t\t\tif (lineNumber < 1) {\n\t\t\t\treturn new Position(1, 1);\n\t\t\t}\n\t\t\tif (lineNumber > lines.length) {\n\t\t\t\treturn new Position(lines.length, lines[lines.length - 1].length + 1);\n\t\t\t}\n\t\t\tconst line = lines[lineNumber - 1];\n\t\t\tif (column > line.length + 1) {\n\t\t\t\treturn new Position(lineNumber, line.length + 1);\n\t\t\t}\n\t\t\treturn new Position(lineNumber, column);\n\t\t};\n\n\t\tif (isValidLineNumber(this.original.endLineNumberExclusive, originalLines)\n\t\t\t&& isValidLineNumber(this.modified.endLineNumberExclusive, modifiedLines)) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tnew Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1),\n\t\t\t\tnew Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1),\n\t\t\t);\n\t\t}\n\n\t\tif (!this.original.isEmpty && !this.modified.isEmpty) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.original.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.modified.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, originalLines),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, modifiedLines),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Situation now: one range is empty and one range touches the last line and one range starts at line 1.\n\t\t// This shouldn't happen for valid diffs.\n\t\tthrow new Error('Invalid diff: cannot convert to range mapping');\n\t}\n}\n\n/**\n * A detailed mapping between two line ranges, including inner changes.\n */\nexport class DetailedLineRangeMapping extends LineRangeMapping {\n\tconstructor(\n\t\toriginal: LineRange,\n\t\tmodified: LineRange,\n\t\tpublic readonly innerChanges: RangeMapping[] | undefined\n\t) {\n\t\tsuper(original, modified);\n\t}\n}\n\n/**\n * Result of a lines diff computation.\n */\nexport class LinesDiff {\n\tconstructor(\n\t\tpublic readonly changes: DetailedLineRangeMapping[],\n\t\tpublic readonly moves: MovedText[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * Represents text that was moved from one location to another.\n */\nexport class MovedText {\n\tconstructor(\n\t\tpublic readonly lineRangeMapping: LineRangeMapping,\n\t\tpublic readonly changes: DetailedLineRangeMapping[]\n\t) {}\n}\n\n/**\n * Helper to convert from range mappings to line range mappings.\n */\nexport function lineRangeMappingFromRangeMappings(\n\talignments: RangeMapping[],\n\toriginalLines: string[],\n\tmodifiedLines: string[],\n\tdontAssertStartLine: boolean = false\n): DetailedLineRangeMapping[] {\n\tconst changes: DetailedLineRangeMapping[] = [];\n\tfor (const g of groupAdjacentBy(\n\t\talignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)),\n\t\t(a1, a2) =>\n\t\t\ta1.original.intersectsOrTouches(a2.original)\n\t\t\t|| a1.modified.intersectsOrTouches(a2.modified)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new DetailedLineRangeMapping(\n\t\t\tfirst.original.join(last.original),\n\t\t\tfirst.modified.join(last.modified),\n\t\t\tg.map(a => a.innerChanges![0])\n\t\t));\n\t}\n\n\tif (!dontAssertStartLine) {\n\t\t// Assert that the changes are sorted and non-overlapping (but don't throw - just log in debug)\n\t\tfor (let i = 1; i < changes.length; i++) {\n\t\t\tconst prev = changes[i - 1];\n\t\t\tconst cur = changes[i];\n\t\t\tif (prev.original.endLineNumberExclusive > cur.original.startLineNumber ||\n\t\t\t\tprev.modified.endLineNumberExclusive > cur.modified.startLineNumber) {\n\t\t\t\t// Silently skip validation issue - may be expected in some edge cases\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes;\n}\n\nfunction getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): DetailedLineRangeMapping {\n\tlet lineStartDelta = 0;\n\tlet lineEndDelta = 0;\n\n\t// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.\n\n\t// original: ]xxx \\n <- this line is not modified\n\t// modified: ]xx \\n\n\tif (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1\n\t\t&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber\n\t\t&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineEndDelta = -1;\n\t}\n\n\t// original: xxx[ \\n <- this line is not modified\n\t// modified: xxx[ \\n\n\tif (rangeMapping.modifiedRange.startColumn - 1 >= (modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startColumn - 1 >= (originalLines[rangeMapping.originalRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta\n\t\t&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineStartDelta = 1;\n\t}\n\n\tconst originalLineRange = new LineRange(\n\t\trangeMapping.originalRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.originalRange.endLineNumber + 1 + lineEndDelta\n\t);\n\tconst modifiedLineRange = new LineRange(\n\t\trangeMapping.modifiedRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta\n\t);\n\n\treturn new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);\n}\n\nfunction* groupAdjacentBy<T>(items: Iterable<T>, shouldBeGrouped: (item1: T, item2: T) => boolean): Iterable<T[]> {\n\tlet currentGroup: T[] | undefined;\n\tlet last: T | undefined;\n\tfor (const item of items) {\n\t\tif (last !== undefined && shouldBeGrouped(last, item)) {\n\t\t\tcurrentGroup!.push(item);\n\t\t} else {\n\t\t\tif (currentGroup) {\n\t\t\t\tyield currentGroup;\n\t\t\t}\n\t\t\tcurrentGroup = [item];\n\t\t}\n\t\tlast = item;\n\t}\n\tif (currentGroup) {\n\t\tyield currentGroup;\n\t}\n}\n\n/**\n * Interface for text that provides lines.\n */\nexport interface IText {\n\treadonly lineCount: number;\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport class ArrayText implements IText {\n\tconstructor(public readonly lines: string[]) {}\n\n\tget lineCount(): number {\n\t\treturn this.lines.length;\n\t}\n\n\tgetLineContent(lineNumber: number): string {\n\t\treturn this.lines[lineNumber - 1];\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { SequenceDiff, ITimeout, InfiniteTimeout, DateTimeout } from '../algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from '../algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from '../algorithms/myersDiffAlgorithm.js';\nimport {\n\toptimizeSequenceDiffs,\n\textendDiffsToEntireWordIfAppropriate,\n\tremoveShortMatches,\n\tremoveVeryShortMatchingLinesBetweenDiffs,\n\tremoveVeryShortMatchingTextBetweenLongDiffs,\n} from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence, Range } from './linesSliceCharSequence.js';\nimport {\n\tLineRange,\n\tRangeMapping,\n\tLineRangeMapping,\n\tDetailedLineRangeMapping,\n\tLinesDiff,\n\tArrayText,\n\tlineRangeMappingFromRangeMappings,\n} from './rangeMapping.js';\n\nexport { DateTimeout, InfiniteTimeout, ITimeout } from '../algorithms/diffAlgorithm.js';\nexport { LineRange, RangeMapping, LineRangeMapping, DetailedLineRangeMapping, LinesDiff } from './rangeMapping.js';\nexport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * Options for the lines diff computer.\n */\nexport interface ILinesDiffComputerOptions {\n\t/**\n\t * Maximum computation time in milliseconds. 0 means no timeout.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * Whether to ignore leading and trailing whitespace.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * Whether to compute moved text detection.\n\t */\n\tcomputeMoves: boolean;\n\n\t/**\n\t * Whether to extend diffs to subword boundaries.\n\t */\n\textendToSubwords: boolean;\n}\n\n/**\n * The main diff computer that computes detailed line diffs.\n */\nexport class DefaultLinesDiffComputer {\n\tprivate readonly _dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly _myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\t// Handle identical single line\n\t\tif (originalLines.length <= 1 && arraysEqual(originalLines, modifiedLines)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\t// Handle empty single line - treat as full replacement\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\t// Create perfect hash for lines (trimmed)\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\t// Choose algorithm based on size\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this._dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\n\t\t// Apply heuristics\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original.lines, modified.lines);\n\n\t\t// TODO: Compute moves if options.computeMoves is true\n\t\tconst moves: never[] = [];\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate _refineDiff(\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\tdiff: SequenceDiff,\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions\n\t): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this._dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this._myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet diffs = diffResult.diffs;\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","/* @ts-self-types=\"./diff_wasm.d.ts\" */\n\n/**\n * Compute a diff between two texts.\n *\n * # Arguments\n * * `original` - The original text (lines separated by newlines)\n * * `modified` - The modified text (lines separated by newlines)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {string} original\n * @param {string} modified\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiff(original, modified, options) {\n const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(modified, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.computeDiff(ptr0, len0, ptr1, len1, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Compute a diff between two arrays of lines.\n *\n * # Arguments\n * * `original_lines` - The original lines (as a JavaScript array of strings)\n * * `modified_lines` - The modified lines (as a JavaScript array of strings)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {any} original_lines\n * @param {any} modified_lines\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiffLines(original_lines, modified_lines, options) {\n const ret = wasm.computeDiffLines(original_lines, modified_lines, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Initialize panic hook for better error messages in the browser console.\n */\nexport function init() {\n wasm.init();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_ef53bc310eb298a0: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Number_6b506e6536831eaa: function(arg0) {\n const ret = Number(arg0);\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_38130e98eecd467d: function(arg0, arg1) {\n const v = arg1;\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_1a45e2c38d4d41b9: function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_0accd80f45e5faa2: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_70a403a56e771704: function(arg0, arg1) {\n const ret = arg0 in arg1;\n return ret;\n },\n __wbg___wbindgen_is_bigint_6ffd6468a9bc44b9: function(arg0) {\n const ret = typeof(arg0) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_754e9f305ff6029e: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_87c3bfe968c6a5ad: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_object_56732c2bc353f41d: function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_undefined_67b456be8673d3d7: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_1068e624fa87f6ab: function(arg0, arg1) {\n const ret = arg0 === arg1;\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_2c56564c75129511: function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n },\n __wbg___wbindgen_number_get_9bb1761122181af2: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_72bdf95d3ae505b1: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_1506f2235d1bdba0: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_8a89609d89f6608a: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_done_60cf307fcc680536: function(arg0) {\n const ret = arg0.done;\n return ret;\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_1f8f054ddbaa7db2: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_unchecked_33f6e5c9e2f2d6b2: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = arg0[arg1];\n return ret;\n },\n __wbg_instanceof_ArrayBuffer_8f49811467741499: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_86f30649f63ef9c2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_67c2c9c4313f4448: function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n },\n __wbg_isSafeInteger_66acec27e09e99a7: function(arg0) {\n const ret = Number.isSafeInteger(arg0);\n return ret;\n },\n __wbg_iterator_8732428d309e270e: function() {\n const ret = Symbol.iterator;\n return ret;\n },\n __wbg_length_4a591ecaa01354d9: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_length_66f1a4b2e9026940: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_578aeef4b6b94378: function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n },\n __wbg_new_ce1ab61c1c2b300d: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_d90091b82fdf5b91: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_next_9e03acdf51c4960d: function(arg0) {\n const ret = arg0.next;\n return ret;\n },\n __wbg_next_eb8ca7351fa27906: function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments); },\n __wbg_prototypesetcall_3249fc62a0fafa30: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_dca99999bba88a9a: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_f3625092ee4b37f4: function(arg0) {\n const ret = arg0.value;\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./diff_wasm_bg.js\": import0,\n };\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('diff_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","/**\n * WASM module loader.\n *\n * Handles async initialization of the WASM module.\n */\n\nimport type { WasmModule } from './types.js';\n// @ts-ignore -- generated at build time by `npm run build:wasm` (wasm-pack --target web).\nimport * as wasm from '../../../out/pkg/diff_wasm.js';\n\nlet wasmModule: WasmModule | null = null;\nlet initPromise: Promise<WasmModule> | null = null;\n\n/**\n * Initialize the WASM module.\n *\n * This must be called before using any WASM-based diff functions.\n * It's safe to call multiple times — subsequent calls are no-ops.\n *\n * @returns Promise that resolves when WASM is ready\n */\nexport async function initWasm(): Promise<WasmModule> {\n\tif (wasmModule) {\n\t\treturn wasmModule;\n\t}\n\tif (initPromise) {\n\t\treturn initPromise;\n\t}\n\n\tinitPromise = (async () => {\n\t\tconst wasmUrl = new URL('../../../out/pkg/diff_wasm_bg.wasm', import.meta.url);\n\t\t// Node's undici fetch does not support file:// URLs, so read bytes ourselves.\n\t\tlet source: BufferSource | URL = wasmUrl;\n\t\tif (typeof process !== 'undefined' && process.versions?.node) {\n\t\t\tconst { readFile } = await import('node:fs/promises');\n\t\t\tsource = await readFile(wasmUrl);\n\t\t}\n\t\tawait wasm.default({ module_or_path: source });\n\t\twasm.init();\n\t\twasmModule = wasm as unknown as WasmModule;\n\t\treturn wasmModule;\n\t})();\n\n\treturn initPromise;\n}\n\n/**\n * Get the WASM module synchronously.\n * \n * @throws Error if WASM hasn't been initialized yet\n * @returns The WASM module\n */\nexport function getWasm(): WasmModule {\n\tif (!wasmModule) {\n\t\tthrow new Error('WASM not initialized. Call initWasm() first and await it.');\n\t}\n\treturn wasmModule;\n}\n\n/**\n * Check if the WASM module is initialized.\n */\nexport function isWasmInitialized(): boolean {\n\treturn wasmModule !== null;\n}\n\n/**\n * Reset the WASM module (useful for testing).\n * @internal\n */\nexport function resetWasm(): void {\n\twasmModule = null;\n\tinitPromise = null;\n}\n","/**\n * Conversions between `LinesDiff` (in-memory class instances) and\n * `WireLinesDiff` (plain JSON-friendly shape used on the worker boundary).\n */\n\nimport {\n LinesDiff,\n DetailedLineRangeMapping,\n LineRange,\n LineRangeMapping,\n MovedText,\n RangeMapping,\n} from '../defaultLinesDiffComputer/rangeMapping.js';\nimport { Range } from '../defaultLinesDiffComputer/linesSliceCharSequence.js';\nimport type {\n WasmDetailedLineRangeMapping,\n WasmRangeMapping,\n} from '../wasm/types.js';\nimport type { WireLinesDiff, WireMovedText } from './protocol.js';\n\nexport function linesDiffToWire(diff: LinesDiff): WireLinesDiff {\n return {\n changes: diff.changes.map(detailedToWire),\n moves: diff.moves.map(moveToWire),\n hitTimeout: diff.hitTimeout,\n };\n}\n\nexport function wireToLinesDiff(wire: WireLinesDiff): LinesDiff {\n const changes = wire.changes.map(wireToDetailed);\n const moves = wire.moves.map(wireToMove);\n return new LinesDiff(changes, moves, wire.hitTimeout);\n}\n\nfunction detailedToWire(m: DetailedLineRangeMapping): WasmDetailedLineRangeMapping {\n return {\n original: {\n startLineNumber: m.original.startLineNumber,\n endLineNumberExclusive: m.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.modified.startLineNumber,\n endLineNumberExclusive: m.modified.endLineNumberExclusive,\n },\n innerChanges: m.innerChanges ? m.innerChanges.map(rangeMappingToWire) : null,\n };\n}\n\nfunction wireToDetailed(m: WasmDetailedLineRangeMapping): DetailedLineRangeMapping {\n const inner = m.innerChanges?.map(wireToRangeMapping);\n return new DetailedLineRangeMapping(\n new LineRange(m.original.startLineNumber, m.original.endLineNumberExclusive),\n new LineRange(m.modified.startLineNumber, m.modified.endLineNumberExclusive),\n inner,\n );\n}\n\nfunction rangeMappingToWire(rm: RangeMapping): WasmRangeMapping {\n return {\n originalStartLine: rm.originalRange.startLineNumber,\n originalStartColumn: rm.originalRange.startColumn,\n originalEndLine: rm.originalRange.endLineNumber,\n originalEndColumn: rm.originalRange.endColumn,\n modifiedStartLine: rm.modifiedRange.startLineNumber,\n modifiedStartColumn: rm.modifiedRange.startColumn,\n modifiedEndLine: rm.modifiedRange.endLineNumber,\n modifiedEndColumn: rm.modifiedRange.endColumn,\n };\n}\n\nfunction wireToRangeMapping(rm: WasmRangeMapping): RangeMapping {\n return new RangeMapping(\n new Range(rm.originalStartLine, rm.originalStartColumn, rm.originalEndLine, rm.originalEndColumn),\n new Range(rm.modifiedStartLine, rm.modifiedStartColumn, rm.modifiedEndLine, rm.modifiedEndColumn),\n );\n}\n\nfunction moveToWire(m: MovedText): WireMovedText {\n return {\n lineRangeMapping: {\n original: {\n startLineNumber: m.lineRangeMapping.original.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.lineRangeMapping.modified.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.modified.endLineNumberExclusive,\n },\n },\n changes: m.changes.map(detailedToWire),\n };\n}\n\nfunction wireToMove(m: WireMovedText): MovedText {\n const lrm = new LineRangeMapping(\n new LineRange(m.lineRangeMapping.original.startLineNumber, m.lineRangeMapping.original.endLineNumberExclusive),\n new LineRange(m.lineRangeMapping.modified.startLineNumber, m.lineRangeMapping.modified.endLineNumberExclusive),\n );\n return new MovedText(lrm, m.changes.map(wireToDetailed));\n}\n"],"names":["CharCode","wasm.default","wasm.init","wasm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wire.js","sources":["../src/diff/core/offsetRange.ts","../src/diff/algorithms/diffAlgorithm.ts","../src/diff/algorithms/dynamicProgrammingDiffing.ts","../src/diff/algorithms/myersDiffAlgorithm.ts","../src/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts","../src/diff/defaultLinesDiffComputer/lineSequence.ts","../src/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts","../src/diff/defaultLinesDiffComputer/rangeMapping.ts","../src/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts","../out/pkg/diff_wasm.js","../src/diff/wasm/loader.ts","../src/diff/worker/wire.ts"],"sourcesContent":["/**\n * A range of offsets (0-based).\n */\nexport class OffsetRange {\n\tpublic static ofLength(length: number): OffsetRange {\n\t\treturn new OffsetRange(0, length);\n\t}\n\n\tpublic static ofStartAndLength(start: number, length: number): OffsetRange {\n\t\treturn new OffsetRange(start, start + length);\n\t}\n\n\tconstructor(\n\t\tpublic readonly start: number,\n\t\tpublic readonly endExclusive: number\n\t) {\n\t\tif (start > endExclusive) {\n\t\t\tthrow new Error(`Invalid range: [${start}, ${endExclusive})`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.start === this.endExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endExclusive - this.start;\n\t}\n\n\tdelta(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive + offset);\n\t}\n\n\tdeltaStart(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start + offset, this.endExclusive);\n\t}\n\n\tdeltaEnd(offset: number): OffsetRange {\n\t\treturn new OffsetRange(this.start, this.endExclusive + offset);\n\t}\n\n\tequals(other: OffsetRange): boolean {\n\t\treturn this.start === other.start && this.endExclusive === other.endExclusive;\n\t}\n\n\tcontainsRange(other: OffsetRange): boolean {\n\t\treturn this.start <= other.start && other.endExclusive <= this.endExclusive;\n\t}\n\n\tcontains(offset: number): boolean {\n\t\treturn this.start <= offset && offset < this.endExclusive;\n\t}\n\n\tjoin(other: OffsetRange): OffsetRange {\n\t\treturn new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n\t}\n\n\tintersect(other: OffsetRange): OffsetRange | undefined {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\tif (start <= end) {\n\t\t\treturn new OffsetRange(start, end);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tintersects(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start < end;\n\t}\n\n\tintersectsOrTouches(other: OffsetRange): boolean {\n\t\tconst start = Math.max(this.start, other.start);\n\t\tconst end = Math.min(this.endExclusive, other.endExclusive);\n\t\treturn start <= end;\n\t}\n\n\tslice<T>(arr: readonly T[]): T[] {\n\t\treturn arr.slice(this.start, this.endExclusive);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.start}, ${this.endExclusive})`;\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\n\n/**\n * A sequence that can be diffed.\n */\nexport interface ISequence {\n\tgetElement(offset: number): number;\n\treadonly length: number;\n\n\t/**\n\t * The higher the score, the better that offset can be used to split the sequence.\n\t * Used to optimize insertions. Must not be negative.\n\t */\n\tgetBoundaryScore?(length: number): number;\n\n\t/**\n\t * For line sequences, getElement returns a number representing trimmed lines.\n\t * This checks equality for the original lines.\n\t * It prevents shifting to less matching lines.\n\t */\n\tisStronglyEqual(offset1: number, offset2: number): boolean;\n}\n\n/**\n * Timeout interface for limiting computation time.\n */\nexport interface ITimeout {\n\tisValid(): boolean;\n}\n\nexport class InfiniteTimeout implements ITimeout {\n\tpublic static readonly instance = new InfiniteTimeout();\n\n\tisValid(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport class DateTimeout implements ITimeout {\n\tprivate readonly startTime = Date.now();\n\tprivate valid = true;\n\n\tconstructor(private timeout: number) {\n\t\tif (timeout <= 0) {\n\t\t\tthrow new Error('timeout must be positive');\n\t\t}\n\t}\n\n\tisValid(): boolean {\n\t\tconst valid = Date.now() - this.startTime < this.timeout;\n\t\tif (!valid && this.valid) {\n\t\t\tthis.valid = false;\n\t\t}\n\t\treturn this.valid;\n\t}\n}\n\n/**\n * Represents an offset pair for two sequences.\n */\nexport class OffsetPair {\n\tpublic static readonly zero = new OffsetPair(0, 0);\n\tpublic static readonly max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n\n\tconstructor(\n\t\tpublic readonly offset1: number,\n\t\tpublic readonly offset2: number\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.offset1} <-> ${this.offset2}`;\n\t}\n\n\tdelta(offset: number): OffsetPair {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n\t}\n\n\tequals(other: OffsetPair): boolean {\n\t\treturn this.offset1 === other.offset1 && this.offset2 === other.offset2;\n\t}\n}\n\n/**\n * Represents a diff between two sequences.\n */\nexport class SequenceDiff {\n\tpublic static invert(sequenceDiffs: SequenceDiff[], doc1Length: number): SequenceDiff[] {\n\t\tconst result: SequenceDiff[] = [];\n\t\tforEachAdjacent(sequenceDiffs, (a, b) => {\n\t\t\tresult.push(SequenceDiff.fromOffsetPairs(\n\t\t\t\ta ? a.getEndExclusives() : OffsetPair.zero,\n\t\t\t\tb ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)\n\t\t\t));\n\t\t});\n\t\treturn result;\n\t}\n\n\tpublic static fromOffsetPairs(start: OffsetPair, endExclusive: OffsetPair): SequenceDiff {\n\t\treturn new SequenceDiff(\n\t\t\tnew OffsetRange(start.offset1, endExclusive.offset1),\n\t\t\tnew OffsetRange(start.offset2, endExclusive.offset2)\n\t\t);\n\t}\n\n\tpublic static assertSorted(sequenceDiffs: SequenceDiff[]): void {\n\t\tlet last: SequenceDiff | undefined = undefined;\n\t\tfor (const cur of sequenceDiffs) {\n\t\t\tif (last) {\n\t\t\t\tif (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {\n\t\t\t\t\tthrow new Error('Sequence diffs must be sorted');\n\t\t\t\t}\n\t\t\t}\n\t\t\tlast = cur;\n\t\t}\n\t}\n\n\tconstructor(\n\t\tpublic readonly seq1Range: OffsetRange,\n\t\tpublic readonly seq2Range: OffsetRange\n\t) {}\n\n\tswap(): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq2Range, this.seq1Range);\n\t}\n\n\ttoString(): string {\n\t\treturn `${this.seq1Range} <-> ${this.seq2Range}`;\n\t}\n\n\tjoin(other: SequenceDiff): SequenceDiff {\n\t\treturn new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n\t}\n\n\tdelta(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n\t}\n\n\tdeltaStart(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n\t}\n\n\tdeltaEnd(offset: number): SequenceDiff {\n\t\tif (offset === 0) {\n\t\t\treturn this;\n\t\t}\n\t\treturn new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n\t}\n\n\tintersectsOrTouches(other: SequenceDiff): boolean {\n\t\treturn this.seq1Range.intersectsOrTouches(other.seq1Range) || this.seq2Range.intersectsOrTouches(other.seq2Range);\n\t}\n\n\tintersect(other: SequenceDiff): SequenceDiff | undefined {\n\t\tconst i1 = this.seq1Range.intersect(other.seq1Range);\n\t\tconst i2 = this.seq2Range.intersect(other.seq2Range);\n\t\tif (!i1 || !i2) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn new SequenceDiff(i1, i2);\n\t}\n\n\tgetStarts(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n\t}\n\n\tgetEndExclusives(): OffsetPair {\n\t\treturn new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n\t}\n}\n\n/**\n * Result of a diff algorithm computation.\n */\nexport class DiffAlgorithmResult {\n\tstatic trivial(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n\t}\n\n\tstatic trivialTimedOut(seq1: ISequence, seq2: ISequence): DiffAlgorithmResult {\n\t\treturn new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n\t}\n\n\tconstructor(\n\t\tpublic readonly diffs: SequenceDiff[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * A synchronous diff algorithm.\n */\nexport interface IDiffAlgorithm {\n\tcompute(sequence1: ISequence, sequence2: ISequence, timeout?: ITimeout): DiffAlgorithmResult;\n}\n\n// Helper function for iterating with neighbors\nfunction forEachAdjacent<T>(items: T[], callback: (prev: T | undefined, current: T | undefined) => void): void {\n\tlet prev: T | undefined = undefined;\n\tfor (const item of items) {\n\t\tcallback(prev, item);\n\t\tprev = item;\n\t}\n\tcallback(prev, undefined);\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * A 2D array implementation.\n */\nexport class Array2D<T> {\n\tprivate readonly array: T[] = [];\n\n\tconstructor(\n\t\tpublic readonly width: number,\n\t\tpublic readonly height: number\n\t) {\n\t\tthis.array = new Array<T>(width * height);\n\t}\n\n\tget(x: number, y: number): T {\n\t\treturn this.array[x + y * this.width];\n\t}\n\n\tset(x: number, y: number, value: T): void {\n\t\tthis.array[x + y * this.width] = value;\n\t}\n}\n\n/**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n */\nexport class DynamicProgrammingDiffing implements IDiffAlgorithm {\n\tcompute(\n\t\tsequence1: ISequence,\n\t\tsequence2: ISequence,\n\t\ttimeout: ITimeout = InfiniteTimeout.instance,\n\t\tequalityScore?: (offset1: number, offset2: number) => number\n\t): DiffAlgorithmResult {\n\t\tif (sequence1.length === 0 || sequence2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(sequence1, sequence2);\n\t\t}\n\n\t\t/**\n\t\t * lcsLengths.get(i, j): Length of the longest common subsequence of \n\t\t * sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n\t\t */\n\t\tconst lcsLengths = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst directions = new Array2D<number>(sequence1.length, sequence2.length);\n\t\tconst lengths = new Array2D<number>(sequence1.length, sequence2.length);\n\n\t\t// Initialize lcsLengths\n\t\tfor (let s1 = 0; s1 < sequence1.length; s1++) {\n\t\t\tfor (let s2 = 0; s2 < sequence2.length; s2++) {\n\t\t\t\tif (!timeout.isValid()) {\n\t\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n\t\t\t\t}\n\n\t\t\t\tconst horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n\t\t\t\tconst verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n\n\t\t\t\tlet extendedSeqScore: number;\n\t\t\t\tif (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n\t\t\t\t\tif (s1 === 0 || s2 === 0) {\n\t\t\t\t\t\textendedSeqScore = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\textendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) {\n\t\t\t\t\t\t// Prefer consecutive diagonals\n\t\t\t\t\t\textendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n\t\t\t\t\t}\n\t\t\t\t\textendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1);\n\t\t\t\t} else {\n\t\t\t\t\textendedSeqScore = -1;\n\t\t\t\t}\n\n\t\t\t\tconst newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n\n\t\t\t\tif (newValue === extendedSeqScore) {\n\t\t\t\t\t// Prefer diagonals\n\t\t\t\t\tconst prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n\t\t\t\t\tlengths.set(s1, s2, prevLen + 1);\n\t\t\t\t\tdirections.set(s1, s2, 3);\n\t\t\t\t} else if (newValue === horizontalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 1);\n\t\t\t\t} else if (newValue === verticalLen) {\n\t\t\t\t\tlengths.set(s1, s2, 0);\n\t\t\t\t\tdirections.set(s1, s2, 2);\n\t\t\t\t}\n\n\t\t\t\tlcsLengths.set(s1, s2, newValue);\n\t\t\t}\n\t\t}\n\n\t\t// Backtracking\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = sequence1.length;\n\t\tlet lastAligningPosS2: number = sequence2.length;\n\n\t\tfunction reportDecreasingAligningPositions(s1: number, s2: number): void {\n\t\t\tif (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(s1 + 1, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(s2 + 1, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastAligningPosS1 = s1;\n\t\t\tlastAligningPosS2 = s2;\n\t\t}\n\n\t\tlet s1 = sequence1.length - 1;\n\t\tlet s2 = sequence2.length - 1;\n\t\twhile (s1 >= 0 && s2 >= 0) {\n\t\t\tif (directions.get(s1, s2) === 3) {\n\t\t\t\treportDecreasingAligningPositions(s1, s2);\n\t\t\t\ts1--;\n\t\t\t\ts2--;\n\t\t\t} else {\n\t\t\t\tif (directions.get(s1, s2) === 1) {\n\t\t\t\t\ts1--;\n\t\t\t\t} else {\n\t\t\t\t\ts2--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treportDecreasingAligningPositions(-1, -1);\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { DiffAlgorithmResult, IDiffAlgorithm, ISequence, ITimeout, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n\n/**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n */\nexport class MyersDiffAlgorithm implements IDiffAlgorithm {\n\tcompute(seq1: ISequence, seq2: ISequence, timeout: ITimeout = InfiniteTimeout.instance): DiffAlgorithmResult {\n\t\t// Common special cases - early return improves performance dramatically\n\t\tif (seq1.length === 0 || seq2.length === 0) {\n\t\t\treturn DiffAlgorithmResult.trivial(seq1, seq2);\n\t\t}\n\n\t\tconst seqX = seq1; // Text on the x axis\n\t\tconst seqY = seq2; // Text on the y axis\n\n\t\tfunction getXAfterSnake(x: number, y: number): number {\n\t\t\twhile (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n\t\t\t\tx++;\n\t\t\t\ty++;\n\t\t\t}\n\t\t\treturn x;\n\t\t}\n\n\t\tlet d = 0;\n\t\t// V[k]: X value of longest d-line that ends in diagonal k.\n\t\t// d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.\n\t\t// diagonal k: Set of points (x,y) with x-y = k.\n\t\tconst V = new FastInt32Array();\n\t\tV.set(0, getXAfterSnake(0, 0));\n\n\t\tconst paths = new FastArrayNegativeIndices<SnakePath | null>();\n\t\tpaths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n\n\t\tlet k = 0;\n\n\t\tloop: while (true) {\n\t\t\td++;\n\t\t\tif (!timeout.isValid()) {\n\t\t\t\treturn DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n\t\t\t}\n\t\t\t// The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result.\n\t\t\tconst lowerBound = -Math.min(d, seqY.length + (d % 2));\n\t\t\tconst upperBound = Math.min(d, seqX.length + (d % 2));\n\t\t\tfor (k = lowerBound; k <= upperBound; k += 2) {\n\t\t\t\t// We can use the X values of (d-1)-lines to compute X value of the longest d-lines.\n\t\t\t\tconst maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // Vertical non-diagonal (add symbol in seqX)\n\t\t\t\tconst maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // Horizontal non-diagonal (delete symbol in seqX)\n\t\t\t\tconst x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n\t\t\t\tconst y = x - k;\n\t\t\t\tif (x > seqX.length || y > seqY.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst newMaxX = getXAfterSnake(x, y);\n\t\t\t\tV.set(k, newMaxX);\n\t\t\t\tconst lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n\t\t\t\tpaths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n\n\t\t\t\tif (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {\n\t\t\t\t\tbreak loop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet path = paths.get(k);\n\t\tconst result: SequenceDiff[] = [];\n\t\tlet lastAligningPosS1: number = seqX.length;\n\t\tlet lastAligningPosS2: number = seqY.length;\n\n\t\twhile (true) {\n\t\t\tconst endX = path ? path.x + path.length : 0;\n\t\t\tconst endY = path ? path.y + path.length : 0;\n\n\t\t\tif (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {\n\t\t\t\tresult.push(new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(endX, lastAligningPosS1),\n\t\t\t\t\tnew OffsetRange(endY, lastAligningPosS2)\n\t\t\t\t));\n\t\t\t}\n\t\t\tif (!path) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastAligningPosS1 = path.x;\n\t\t\tlastAligningPosS2 = path.y;\n\n\t\t\tpath = path.prev;\n\t\t}\n\n\t\tresult.reverse();\n\t\treturn new DiffAlgorithmResult(result, false);\n\t}\n}\n\nclass SnakePath {\n\tconstructor(\n\t\tpublic readonly prev: SnakePath | null,\n\t\tpublic readonly x: number,\n\t\tpublic readonly y: number,\n\t\tpublic readonly length: number\n\t) { }\n}\n\n/**\n * An array that supports fast negative indices.\n */\nclass FastInt32Array {\n\tprivate positiveArr: Int32Array = new Int32Array(10);\n\tprivate negativeArr: Int32Array = new Int32Array(10);\n\n\tget(idx: number): number {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: number): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tif (idx >= this.negativeArr.length) {\n\t\t\t\tconst arr = this.negativeArr;\n\t\t\t\tthis.negativeArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.negativeArr.set(arr);\n\t\t\t}\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tif (idx >= this.positiveArr.length) {\n\t\t\t\tconst arr = this.positiveArr;\n\t\t\t\tthis.positiveArr = new Int32Array(arr.length * 2);\n\t\t\t\tthis.positiveArr.set(arr);\n\t\t\t}\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n\n/**\n * An array that supports fast negative indices for objects.\n */\nclass FastArrayNegativeIndices<T> {\n\tprivate readonly positiveArr: T[] = [];\n\tprivate readonly negativeArr: T[] = [];\n\n\tget(idx: number): T {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\treturn this.negativeArr[idx];\n\t\t} else {\n\t\t\treturn this.positiveArr[idx];\n\t\t}\n\t}\n\n\tset(idx: number, value: T): void {\n\t\tif (idx < 0) {\n\t\t\tidx = -idx - 1;\n\t\t\tthis.negativeArr[idx] = value;\n\t\t} else {\n\t\t\tthis.positiveArr[idx] = value;\n\t\t}\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence, OffsetPair, SequenceDiff } from '../algorithms/diffAlgorithm.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\n\nexport function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet result = sequenceDiffs;\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\t// Sometimes, calling this function twice improves the result.\n\tresult = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n\tresult = shiftSequenceDiffs(sequence1, sequence2, result);\n\treturn result;\n}\n\n/**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\nfunction joinSequenceDiffsByShifting(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (sequenceDiffs.length === 0) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tconst result: SequenceDiff[] = [];\n\tresult.push(sequenceDiffs[0]);\n\n\t// First move them all to the left as much as possible and join them if possible\n\tfor (let i = 1; i < sequenceDiffs.length; i++) {\n\t\tconst prevResult = result[result.length - 1];\n\t\tlet cur = sequenceDiffs[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 1; d <= length; d++) {\n\t\t\t\tif (\n\t\t\t\t\tsequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) ||\n\t\t\t\t\tsequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\td--;\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[result.length - 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length),\n\t\t\t\t\tnew OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcur = cur.delta(-d);\n\t\t}\n\n\t\tresult.push(cur);\n\t}\n\n\tconst result2: SequenceDiff[] = [];\n\t// Then move them all to the right and join them again if possible\n\tfor (let i = 0; i < result.length - 1; i++) {\n\t\tconst nextResult = result[i + 1];\n\t\tlet cur = result[i];\n\n\t\tif (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n\t\t\tconst length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n\t\t\tlet d;\n\t\t\tfor (d = 0; d < length; d++) {\n\t\t\t\tif (\n\t\t\t\t\t!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) ||\n\t\t\t\t\t!sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)\n\t\t\t\t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (d === length) {\n\t\t\t\t// Merge previous and current diff\n\t\t\t\tresult[i + 1] = new SequenceDiff(\n\t\t\t\t\tnew OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive),\n\t\t\t\t\tnew OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (d > 0) {\n\t\t\t\tcur = cur.delta(d);\n\t\t\t}\n\t\t}\n\n\t\tresult2.push(cur);\n\t}\n\n\tif (result.length > 0) {\n\t\tresult2.push(result[result.length - 1]);\n\t}\n\n\treturn result2;\n}\n\nfunction shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tif (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {\n\t\treturn sequenceDiffs;\n\t}\n\n\tfor (let i = 0; i < sequenceDiffs.length; i++) {\n\t\tconst prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined);\n\t\tconst diff = sequenceDiffs[i];\n\t\tconst nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined);\n\n\t\tconst seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n\t\tconst seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n\n\t\tif (diff.seq1Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n\t\t} else if (diff.seq2Range.isEmpty) {\n\t\t\tsequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n\t\t}\n\t}\n\n\treturn sequenceDiffs;\n}\n\nfunction shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, sequence2: ISequence, seq1ValidRange: OffsetRange, seq2ValidRange: OffsetRange): SequenceDiff {\n\tconst maxShiftLimit = 100; // To prevent performance issues\n\n\tlet deltaBefore = 1;\n\twhile (\n\t\tdiff.seq1Range.start - deltaBefore >= seq1ValidRange.start &&\n\t\tdiff.seq2Range.start - deltaBefore >= seq2ValidRange.start &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit\n\t) {\n\t\tdeltaBefore++;\n\t}\n\tdeltaBefore--;\n\n\tlet deltaAfter = 0;\n\twhile (\n\t\tdiff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive &&\n\t\tdiff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive &&\n\t\tsequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit\n\t) {\n\t\tdeltaAfter++;\n\t}\n\n\tif (deltaBefore === 0 && deltaAfter === 0) {\n\t\treturn diff;\n\t}\n\n\tlet bestDelta = 0;\n\tlet bestScore = -1;\n\t// Find best scored delta\n\tfor (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n\t\tconst seq2OffsetStart = diff.seq2Range.start + delta;\n\t\tconst seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n\t\tconst seq1Offset = diff.seq1Range.start + delta;\n\n\t\tconst score = sequence1.getBoundaryScore!(seq1Offset) + sequence2.getBoundaryScore!(seq2OffsetStart) + sequence2.getBoundaryScore!(seq2OffsetEndExclusive);\n\t\tif (score > bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestDelta = delta;\n\t\t}\n\t}\n\n\treturn diff.delta(bestDelta);\n}\n\nexport function removeShortMatches(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\tfor (const s of sequenceDiffs) {\n\t\tconst last = result[result.length - 1];\n\t\tif (!last) {\n\t\t\tresult.push(s);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {\n\t\t\tresult[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n\t\t} else {\n\t\t\tresult.push(s);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function extendDiffsToEntireWordIfAppropriate(\n\tsequence1: LinesSliceCharSequence,\n\tsequence2: LinesSliceCharSequence,\n\tsequenceDiffs: SequenceDiff[],\n\tfindParent: (seq: LinesSliceCharSequence, idx: number) => OffsetRange | undefined,\n\tforce: boolean = false\n): SequenceDiff[] {\n\tconst equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n\n\tconst additional: SequenceDiff[] = [];\n\n\tlet lastPoint = new OffsetPair(0, 0);\n\n\tfunction scanWord(pair: OffsetPair, equalMapping: SequenceDiff): void {\n\t\tif (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst w1 = findParent(sequence1, pair.offset1);\n\t\tconst w2 = findParent(sequence2, pair.offset2);\n\t\tif (!w1 || !w2) {\n\t\t\treturn;\n\t\t}\n\t\tlet w = new SequenceDiff(w1, w2);\n\t\tconst equalPart = w.intersect(equalMapping)!;\n\n\t\tlet equalChars1 = equalPart.seq1Range.length;\n\t\tlet equalChars2 = equalPart.seq2Range.length;\n\n\t\twhile (equalMappings.length > 0) {\n\t\t\tconst next = equalMappings[0];\n\t\t\tconst intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);\n\t\t\tif (!intersects) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst v1 = findParent(sequence1, next.seq1Range.start);\n\t\t\tconst v2 = findParent(sequence2, next.seq2Range.start);\n\t\t\tconst v = new SequenceDiff(v1!, v2!);\n\t\t\tconst equalPartV = v.intersect(next)!;\n\n\t\t\tequalChars1 += equalPartV.seq1Range.length;\n\t\t\tequalChars2 += equalPartV.seq2Range.length;\n\n\t\t\tw = w.join(v);\n\n\t\t\tif (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {\n\t\t\t\tequalMappings.shift();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif ((force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length) || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {\n\t\t\tadditional.push(w);\n\t\t}\n\n\t\tlastPoint = w.getEndExclusives();\n\t}\n\n\twhile (equalMappings.length > 0) {\n\t\tconst next = equalMappings.shift()!;\n\t\tif (next.seq1Range.isEmpty) {\n\t\t\tcontinue;\n\t\t}\n\t\tscanWord(next.getStarts(), next);\n\t\tscanWord(next.getEndExclusives().delta(-1), next);\n\t}\n\n\tconst merged = mergeSequenceDiffs(sequenceDiffs, additional);\n\treturn merged;\n}\n\nfunction mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: SequenceDiff[]): SequenceDiff[] {\n\tconst result: SequenceDiff[] = [];\n\n\twhile (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n\t\tconst sd1 = sequenceDiffs1[0];\n\t\tconst sd2 = sequenceDiffs2[0];\n\n\t\tlet next: SequenceDiff;\n\t\tif (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {\n\t\t\tnext = sequenceDiffs1.shift()!;\n\t\t} else {\n\t\t\tnext = sequenceDiffs2.shift()!;\n\t\t}\n\n\t\tif (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {\n\t\t\tresult[result.length - 1] = result[result.length - 1].join(next);\n\t\t} else {\n\t\t\tresult.push(next);\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function removeVeryShortMatchingLinesBetweenDiffs(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange);\n\t\t\t\tconst unchangedTextWithoutWs = unchangedText.replace(/\\s/g, '');\n\t\t\t\tif (unchangedTextWithoutWs.length <= 4\n\t\t\t\t\t&& (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\treturn diffs;\n}\n\nexport function removeVeryShortMatchingTextBetweenLongDiffs(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {\n\tlet diffs = sequenceDiffs;\n\tif (diffs.length === 0) {\n\t\treturn diffs;\n\t}\n\n\tlet counter = 0;\n\tlet shouldRepeat: boolean;\n\tdo {\n\t\tshouldRepeat = false;\n\n\t\tconst result: SequenceDiff[] = [diffs[0]];\n\n\t\tfor (let i = 1; i < diffs.length; i++) {\n\t\t\tconst cur = diffs[i];\n\t\t\tconst lastResult = result[result.length - 1];\n\n\t\t\tfunction shouldJoinDiffs(before: SequenceDiff, after: SequenceDiff): boolean {\n\t\t\t\tconst unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n\n\t\t\t\tconst unchangedLineCount = sequence1.countLinesIn(unchangedRange);\n\t\t\t\tif (unchangedLineCount > 5 || unchangedRange.length > 500) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst unchangedText = sequence1.getText(unchangedRange).trim();\n\t\t\t\tif (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n\t\t\t\tconst beforeSeq1Length = before.seq1Range.length;\n\t\t\t\tconst beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n\t\t\t\tconst beforeSeq2Length = before.seq2Range.length;\n\n\t\t\t\tconst afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n\t\t\t\tconst afterSeq1Length = after.seq1Range.length;\n\t\t\t\tconst afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n\t\t\t\tconst afterSeq2Length = after.seq2Range.length;\n\n\t\t\t\tconst max = 2 * 40 + 50;\n\t\t\t\tfunction cap(v: number): number {\n\t\t\t\t\treturn Math.min(v, max);\n\t\t\t\t}\n\n\t\t\t\tif (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5)\n\t\t\t\t\t+ Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > ((max ** 1.5) ** 1.5) * 1.3) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst shouldJoin = shouldJoinDiffs(lastResult, cur);\n\t\t\tif (shouldJoin) {\n\t\t\t\tshouldRepeat = true;\n\t\t\t\tresult[result.length - 1] = result[result.length - 1].join(cur);\n\t\t\t} else {\n\t\t\t\tresult.push(cur);\n\t\t\t}\n\t\t}\n\n\t\tdiffs = result;\n\t} while (counter++ < 10 && shouldRepeat);\n\n\tconst newDiffs: SequenceDiff[] = [];\n\n\t// Remove short suffixes/prefixes\n\tforEachWithNeighbors(diffs, (prev, cur, next) => {\n\t\tlet newDiff = cur;\n\n\t\tfunction shouldMarkAsChanged(text: string): boolean {\n\t\t\treturn text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n\t\t}\n\n\t\tconst fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n\t\tconst prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n\t\tif (shouldMarkAsChanged(prefix)) {\n\t\t\tnewDiff = newDiff.deltaStart(-prefix.length);\n\t\t}\n\t\tconst suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n\t\tif (shouldMarkAsChanged(suffix)) {\n\t\t\tnewDiff = newDiff.deltaEnd(suffix.length);\n\t\t}\n\n\t\tconst availableSpace = SequenceDiff.fromOffsetPairs(\n\t\t\tprev ? prev.getEndExclusives() : OffsetPair.zero,\n\t\t\tnext ? next.getStarts() : OffsetPair.max\n\t\t);\n\t\tconst intersected = newDiff.intersect(availableSpace)!;\n\t\tif (newDiffs.length > 0 && intersected.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {\n\t\t\tnewDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(intersected);\n\t\t} else {\n\t\t\tnewDiffs.push(intersected);\n\t\t}\n\t});\n\n\treturn newDiffs;\n}\n\nfunction forEachWithNeighbors<T>(items: T[], callback: (prev: T | undefined, cur: T, next: T | undefined) => void): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tcallback(items[i - 1], items[i], items[i + 1]);\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tSpace: 32,\n\tTab: 9,\n};\n\nexport class LineSequence implements ISequence {\n\tconstructor(\n\t\tprivate readonly trimmedHash: number[],\n\t\tprivate readonly lines: string[]\n\t) {}\n\n\tgetElement(offset: number): number {\n\t\treturn this.trimmedHash[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.trimmedHash.length;\n\t}\n\n\tgetBoundaryScore(length: number): number {\n\t\tconst indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);\n\t\tconst indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);\n\t\treturn 1000 - (indentationBefore + indentationAfter);\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.lines.slice(range.start, range.endExclusive).join('\\n');\n\t}\n\n\tisStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.lines[offset1] === this.lines[offset2];\n\t}\n}\n\nfunction getIndentation(str: string): number {\n\tlet i = 0;\n\twhile (i < str.length && (str.charCodeAt(i) === CharCode.Space || str.charCodeAt(i) === CharCode.Tab)) {\n\t\ti++;\n\t}\n\treturn i;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { ISequence } from '../algorithms/diffAlgorithm.js';\n\nconst CharCode = {\n\tLineFeed: 10,\n\tCarriageReturn: 13,\n\tSpace: 32,\n\tTab: 9,\n\ta: 97,\n\tz: 122,\n\tA: 65,\n\tZ: 90,\n\tDigit0: 48,\n\tDigit9: 57,\n\tComma: 44,\n\tSemicolon: 59,\n};\n\nfunction isSpace(charCode: number): boolean {\n\treturn charCode === CharCode.Space || charCode === CharCode.Tab;\n}\n\n/**\n * Represents a range in terms of lines and columns.\n */\nexport interface IRange {\n\treadonly startLineNumber: number;\n\treadonly startColumn: number;\n\treadonly endLineNumber: number;\n\treadonly endColumn: number;\n}\n\nexport class Range implements IRange {\n\tpublic readonly startLineNumber: number;\n\tpublic readonly startColumn: number;\n\tpublic readonly endLineNumber: number;\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tthis.startLineNumber = startLineNumber;\n\t\tthis.startColumn = startColumn;\n\t\tthis.endLineNumber = endLineNumber;\n\t\tthis.endColumn = endColumn;\n\t}\n\n\tstatic fromPositions(start: Position, end: Position): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n}\n\nexport class Position {\n\tconstructor(\n\t\tpublic readonly lineNumber: number,\n\t\tpublic readonly column: number\n\t) {}\n\n\tisBefore(other: Position): boolean {\n\t\tif (this.lineNumber < other.lineNumber) {\n\t\t\treturn true;\n\t\t}\n\t\tif (other.lineNumber < this.lineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.column < other.column;\n\t}\n}\n\nexport class LinesSliceCharSequence implements ISequence {\n\tprivate readonly elements: number[] = [];\n\tprivate readonly firstElementOffsetByLineIdx: number[] = [];\n\tprivate readonly lineStartOffsets: number[] = [];\n\tprivate readonly trimmedWsLengthsByLineIdx: number[] = [];\n\tprivate readonly _range: Range;\n\n\tconstructor(\n\t\tpublic readonly lines: string[],\n\t\trange: Range,\n\t\tpublic readonly considerWhitespaceChanges: boolean\n\t) {\n\t\tthis._range = range;\n\t\tthis.firstElementOffsetByLineIdx.push(0);\n\t\tfor (let lineNumber = this._range.startLineNumber; lineNumber <= this._range.endLineNumber; lineNumber++) {\n\t\t\tlet line = lines[lineNumber - 1];\n\t\t\tlet lineStartOffset = 0;\n\t\t\tif (lineNumber === this._range.startLineNumber && this._range.startColumn > 1) {\n\t\t\t\tlineStartOffset = this._range.startColumn - 1;\n\t\t\t\tline = line.substring(lineStartOffset);\n\t\t\t}\n\t\t\tthis.lineStartOffsets.push(lineStartOffset);\n\n\t\t\tlet trimmedWsLength = 0;\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\tconst trimmedStartLine = line.trimStart();\n\t\t\t\ttrimmedWsLength = line.length - trimmedStartLine.length;\n\t\t\t\tline = trimmedStartLine.trimEnd();\n\t\t\t}\n\t\t\tthis.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n\n\t\t\tconst lineLength = lineNumber === this._range.endLineNumber ? Math.min(this._range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n\t\t\tfor (let i = 0; i < lineLength; i++) {\n\t\t\t\tthis.elements.push(line.charCodeAt(i));\n\t\t\t}\n\n\t\t\tif (lineNumber < this._range.endLineNumber) {\n\t\t\t\tthis.elements.push('\\n'.charCodeAt(0));\n\t\t\t\tthis.firstElementOffsetByLineIdx.push(this.elements.length);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoString(): string {\n\t\treturn `Slice: \"${this.text}\"`;\n\t}\n\n\tget text(): string {\n\t\treturn this.getText(new OffsetRange(0, this.length));\n\t}\n\n\tgetText(range: OffsetRange): string {\n\t\treturn this.elements.slice(range.start, range.endExclusive).map(e => String.fromCharCode(e)).join('');\n\t}\n\n\tgetElement(offset: number): number {\n\t\treturn this.elements[offset];\n\t}\n\n\tget length(): number {\n\t\treturn this.elements.length;\n\t}\n\n\tpublic getBoundaryScore(length: number): number {\n\t\tconst prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n\t\tconst nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakCR && nextCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// don't break between \\r and \\n\n\t\t\treturn 0;\n\t\t}\n\t\tif (prevCategory === CharBoundaryCategory.LineBreakLF) {\n\t\t\t// prefer the linebreak before the change\n\t\t\treturn 150;\n\t\t}\n\n\t\tlet score = 0;\n\t\tif (prevCategory !== nextCategory) {\n\t\t\tscore += 10;\n\t\t\tif (prevCategory === CharBoundaryCategory.WordLower && nextCategory === CharBoundaryCategory.WordUpper) {\n\t\t\t\tscore += 1;\n\t\t\t}\n\t\t}\n\n\t\tscore += getCategoryBoundaryScore(prevCategory);\n\t\tscore += getCategoryBoundaryScore(nextCategory);\n\n\t\treturn score;\n\t}\n\n\tpublic translateOffset(offset: number, preference: 'left' | 'right' = 'right'): Position {\n\t\tconst i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n\t\tconst lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n\t\treturn new Position(\n\t\t\tthis._range.startLineNumber + i,\n\t\t\t1 + this.lineStartOffsets[i] + lineOffset + ((lineOffset === 0 && preference === 'left') ? 0 : this.trimmedWsLengthsByLineIdx[i])\n\t\t);\n\t}\n\n\tpublic translateRange(range: OffsetRange): Range {\n\t\tconst pos1 = this.translateOffset(range.start, 'right');\n\t\tconst pos2 = this.translateOffset(range.endExclusive, 'left');\n\t\tif (pos2.isBefore(pos1)) {\n\t\t\treturn Range.fromPositions(pos2, pos2);\n\t\t}\n\t\treturn Range.fromPositions(pos1, pos2);\n\t}\n\n\t/**\n\t * Finds the word that contains the character at the given offset\n\t */\n\tpublic findWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\t/** fooBar has the two sub-words foo and bar */\n\tpublic findSubWordContaining(offset: number): OffsetRange | undefined {\n\t\tif (offset < 0 || offset >= this.elements.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!isWordChar(this.elements[offset])) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// find start\n\t\tlet start = offset;\n\t\twhile (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) {\n\t\t\tstart--;\n\t\t}\n\n\t\t// find end\n\t\tlet end = offset;\n\t\twhile (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) {\n\t\t\tend++;\n\t\t}\n\n\t\treturn new OffsetRange(start, end);\n\t}\n\n\tpublic countLinesIn(range: OffsetRange): number {\n\t\treturn this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n\t}\n\n\tpublic isStronglyEqual(offset1: number, offset2: number): boolean {\n\t\treturn this.elements[offset1] === this.elements[offset2];\n\t}\n\n\tpublic extendToFullLines(range: OffsetRange): OffsetRange {\n\t\tconst start = findLastMonotonous(this.firstElementOffsetByLineIdx, x => x <= range.start) ?? 0;\n\t\tconst end = findFirstMonotonous(this.firstElementOffsetByLineIdx, x => range.endExclusive <= x) ?? this.elements.length;\n\t\treturn new OffsetRange(start, end);\n\t}\n}\n\nfunction isWordChar(charCode: number): boolean {\n\treturn charCode >= CharCode.a && charCode <= CharCode.z\n\t\t|| charCode >= CharCode.A && charCode <= CharCode.Z\n\t\t|| charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9;\n}\n\nfunction isUpperCase(charCode: number): boolean {\n\treturn charCode >= CharCode.A && charCode <= CharCode.Z;\n}\n\nconst enum CharBoundaryCategory {\n\tWordLower,\n\tWordUpper,\n\tWordNumber,\n\tEnd,\n\tOther,\n\tSeparator,\n\tSpace,\n\tLineBreakCR,\n\tLineBreakLF,\n}\n\nconst categoryScore: Record<CharBoundaryCategory, number> = {\n\t[CharBoundaryCategory.WordLower]: 0,\n\t[CharBoundaryCategory.WordUpper]: 0,\n\t[CharBoundaryCategory.WordNumber]: 0,\n\t[CharBoundaryCategory.End]: 10,\n\t[CharBoundaryCategory.Other]: 2,\n\t[CharBoundaryCategory.Separator]: 30,\n\t[CharBoundaryCategory.Space]: 3,\n\t[CharBoundaryCategory.LineBreakCR]: 10,\n\t[CharBoundaryCategory.LineBreakLF]: 10,\n};\n\nfunction getCategoryBoundaryScore(category: CharBoundaryCategory): number {\n\treturn categoryScore[category];\n}\n\nfunction getCategory(charCode: number): CharBoundaryCategory {\n\tif (charCode === CharCode.LineFeed) {\n\t\treturn CharBoundaryCategory.LineBreakLF;\n\t} else if (charCode === CharCode.CarriageReturn) {\n\t\treturn CharBoundaryCategory.LineBreakCR;\n\t} else if (isSpace(charCode)) {\n\t\treturn CharBoundaryCategory.Space;\n\t} else if (charCode >= CharCode.a && charCode <= CharCode.z) {\n\t\treturn CharBoundaryCategory.WordLower;\n\t} else if (charCode >= CharCode.A && charCode <= CharCode.Z) {\n\t\treturn CharBoundaryCategory.WordUpper;\n\t} else if (charCode >= CharCode.Digit0 && charCode <= CharCode.Digit9) {\n\t\treturn CharBoundaryCategory.WordNumber;\n\t} else if (charCode === -1) {\n\t\treturn CharBoundaryCategory.End;\n\t} else if (charCode === CharCode.Comma || charCode === CharCode.Semicolon) {\n\t\treturn CharBoundaryCategory.Separator;\n\t} else {\n\t\treturn CharBoundaryCategory.Other;\n\t}\n}\n\n// Binary search helpers\nfunction findLastIdxMonotonous<T>(array: T[], predicate: (item: T) => boolean): number {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\thigh = mid - 1;\n\t\t}\n\t}\n\treturn high;\n}\n\nfunction findLastMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tconst idx = findLastIdxMonotonous(array, predicate);\n\treturn idx >= 0 ? array[idx] : undefined;\n}\n\nfunction findFirstMonotonous<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n\tlet low = 0;\n\tlet high = array.length - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tif (predicate(array[mid])) {\n\t\t\thigh = mid - 1;\n\t\t} else {\n\t\t\tlow = mid + 1;\n\t\t}\n\t}\n\treturn low < array.length ? array[low] : undefined;\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * A range of lines (1-based, end is exclusive).\n */\nexport class LineRange {\n\tconstructor(\n\t\tpublic readonly startLineNumber: number,\n\t\tpublic readonly endLineNumberExclusive: number\n\t) {\n\t\tif (startLineNumber > endLineNumberExclusive) {\n\t\t\tthrow new Error(`Invalid range: ${startLineNumber} > ${endLineNumberExclusive}`);\n\t\t}\n\t}\n\n\tget isEmpty(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumberExclusive;\n\t}\n\n\tget length(): number {\n\t\treturn this.endLineNumberExclusive - this.startLineNumber;\n\t}\n\n\tjoin(other: LineRange): LineRange {\n\t\treturn new LineRange(\n\t\t\tMath.min(this.startLineNumber, other.startLineNumber),\n\t\t\tMath.max(this.endLineNumberExclusive, other.endLineNumberExclusive)\n\t\t);\n\t}\n\n\tintersectsOrTouches(other: LineRange): boolean {\n\t\treturn this.startLineNumber <= other.endLineNumberExclusive\n\t\t\t&& other.startLineNumber <= this.endLineNumberExclusive;\n\t}\n\n\ttoOffsetRange(): OffsetRange {\n\t\treturn new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n\t}\n\n\ttoString(): string {\n\t\treturn `[${this.startLineNumber}, ${this.endLineNumberExclusive})`;\n\t}\n}\n\n/**\n * A mapping between two ranges.\n */\nexport class RangeMapping {\n\tconstructor(\n\t\tpublic readonly originalRange: Range,\n\t\tpublic readonly modifiedRange: Range\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${rangeToString(this.originalRange)} <-> ${rangeToString(this.modifiedRange)}`;\n\t}\n\n\tstatic assertSorted(rangeMappings: RangeMapping[]): void {\n\t\tfor (let i = 1; i < rangeMappings.length; i++) {\n\t\t\tconst prev = rangeMappings[i - 1];\n\t\t\tconst cur = rangeMappings[i];\n\t\t\tif (!(prev.originalRange.endLineNumber <= cur.originalRange.startLineNumber ||\n\t\t\t\t(prev.originalRange.endLineNumber === cur.originalRange.startLineNumber && prev.originalRange.endColumn <= cur.originalRange.startColumn))) {\n\t\t\t\tthrow new Error('RangeMappings must be sorted');\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction rangeToString(range: Range): string {\n\treturn `(${range.startLineNumber}:${range.startColumn})-(${range.endLineNumber}:${range.endColumn})`;\n}\n\n/**\n * A mapping between two line ranges.\n */\nexport class LineRangeMapping {\n\tconstructor(\n\t\tpublic readonly original: LineRange,\n\t\tpublic readonly modified: LineRange\n\t) {}\n\n\ttoString(): string {\n\t\treturn `${this.original} <-> ${this.modified}`;\n\t}\n\n\t/**\n\t * This method assumes that the LineRangeMapping describes a valid diff!\n\t * I.e. if one range is empty, the other range cannot be the entire document.\n\t * It avoids various problems when the line range points to non-existing line-numbers.\n\t*/\n\ttoRangeMapping2(originalLines: string[], modifiedLines: string[]): RangeMapping {\n\t\tconst isValidLineNumber = (lineNumber: number, lines: string[]): boolean => {\n\t\t\treturn lineNumber >= 1 && lineNumber <= lines.length;\n\t\t};\n\n\t\tconst normalizePosition = (lineNumber: number, column: number, lines: string[]): Position => {\n\t\t\tif (lineNumber < 1) {\n\t\t\t\treturn new Position(1, 1);\n\t\t\t}\n\t\t\tif (lineNumber > lines.length) {\n\t\t\t\treturn new Position(lines.length, lines[lines.length - 1].length + 1);\n\t\t\t}\n\t\t\tconst line = lines[lineNumber - 1];\n\t\t\tif (column > line.length + 1) {\n\t\t\t\treturn new Position(lineNumber, line.length + 1);\n\t\t\t}\n\t\t\treturn new Position(lineNumber, column);\n\t\t};\n\n\t\tif (isValidLineNumber(this.original.endLineNumberExclusive, originalLines)\n\t\t\t&& isValidLineNumber(this.modified.endLineNumberExclusive, modifiedLines)) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tnew Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1),\n\t\t\t\tnew Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1),\n\t\t\t);\n\t\t}\n\n\t\tif (!this.original.isEmpty && !this.modified.isEmpty) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.original.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnew Position(this.modified.startLineNumber, 1),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {\n\t\t\treturn new RangeMapping(\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, originalLines),\n\t\t\t\t\tnormalizePosition(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, originalLines)\n\t\t\t\t),\n\t\t\t\tRange.fromPositions(\n\t\t\t\t\tnormalizePosition(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, modifiedLines),\n\t\t\t\t\tnormalizePosition(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER, modifiedLines)\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Situation now: one range is empty and one range touches the last line and one range starts at line 1.\n\t\t// This shouldn't happen for valid diffs.\n\t\tthrow new Error('Invalid diff: cannot convert to range mapping');\n\t}\n}\n\n/**\n * A detailed mapping between two line ranges, including inner changes.\n */\nexport class DetailedLineRangeMapping extends LineRangeMapping {\n\tconstructor(\n\t\toriginal: LineRange,\n\t\tmodified: LineRange,\n\t\tpublic readonly innerChanges: RangeMapping[] | undefined\n\t) {\n\t\tsuper(original, modified);\n\t}\n}\n\n/**\n * Result of a lines diff computation.\n */\nexport class LinesDiff {\n\tconstructor(\n\t\tpublic readonly changes: DetailedLineRangeMapping[],\n\t\tpublic readonly moves: MovedText[],\n\t\tpublic readonly hitTimeout: boolean\n\t) {}\n}\n\n/**\n * Represents text that was moved from one location to another.\n */\nexport class MovedText {\n\tconstructor(\n\t\tpublic readonly lineRangeMapping: LineRangeMapping,\n\t\tpublic readonly changes: DetailedLineRangeMapping[]\n\t) {}\n}\n\n/**\n * Helper to convert from range mappings to line range mappings.\n */\nexport function lineRangeMappingFromRangeMappings(\n\talignments: RangeMapping[],\n\toriginalLines: string[],\n\tmodifiedLines: string[],\n\tdontAssertStartLine: boolean = false\n): DetailedLineRangeMapping[] {\n\tconst changes: DetailedLineRangeMapping[] = [];\n\tfor (const g of groupAdjacentBy(\n\t\talignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)),\n\t\t(a1, a2) =>\n\t\t\ta1.original.intersectsOrTouches(a2.original)\n\t\t\t|| a1.modified.intersectsOrTouches(a2.modified)\n\t)) {\n\t\tconst first = g[0];\n\t\tconst last = g[g.length - 1];\n\n\t\tchanges.push(new DetailedLineRangeMapping(\n\t\t\tfirst.original.join(last.original),\n\t\t\tfirst.modified.join(last.modified),\n\t\t\tg.map(a => a.innerChanges![0])\n\t\t));\n\t}\n\n\tif (!dontAssertStartLine) {\n\t\t// Assert that the changes are sorted and non-overlapping (but don't throw - just log in debug)\n\t\tfor (let i = 1; i < changes.length; i++) {\n\t\t\tconst prev = changes[i - 1];\n\t\t\tconst cur = changes[i];\n\t\t\tif (prev.original.endLineNumberExclusive > cur.original.startLineNumber ||\n\t\t\t\tprev.modified.endLineNumberExclusive > cur.modified.startLineNumber) {\n\t\t\t\t// Silently skip validation issue - may be expected in some edge cases\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes;\n}\n\nfunction getLineRangeMapping(rangeMapping: RangeMapping, originalLines: string[], modifiedLines: string[]): DetailedLineRangeMapping {\n\tlet lineStartDelta = 0;\n\tlet lineEndDelta = 0;\n\n\t// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.\n\n\t// original: ]xxx \\n <- this line is not modified\n\t// modified: ]xx \\n\n\tif (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1\n\t\t&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber\n\t\t&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineEndDelta = -1;\n\t}\n\n\t// original: xxx[ \\n <- this line is not modified\n\t// modified: xxx[ \\n\n\tif (rangeMapping.modifiedRange.startColumn - 1 >= (modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startColumn - 1 >= (originalLines[rangeMapping.originalRange.startLineNumber - 1]?.length ?? 0)\n\t\t&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta\n\t\t&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {\n\t\t// We can only do this if the range is not empty yet\n\t\tlineStartDelta = 1;\n\t}\n\n\tconst originalLineRange = new LineRange(\n\t\trangeMapping.originalRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.originalRange.endLineNumber + 1 + lineEndDelta\n\t);\n\tconst modifiedLineRange = new LineRange(\n\t\trangeMapping.modifiedRange.startLineNumber + lineStartDelta,\n\t\trangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta\n\t);\n\n\treturn new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);\n}\n\nfunction* groupAdjacentBy<T>(items: Iterable<T>, shouldBeGrouped: (item1: T, item2: T) => boolean): Iterable<T[]> {\n\tlet currentGroup: T[] | undefined;\n\tlet last: T | undefined;\n\tfor (const item of items) {\n\t\tif (last !== undefined && shouldBeGrouped(last, item)) {\n\t\t\tcurrentGroup!.push(item);\n\t\t} else {\n\t\t\tif (currentGroup) {\n\t\t\t\tyield currentGroup;\n\t\t\t}\n\t\t\tcurrentGroup = [item];\n\t\t}\n\t\tlast = item;\n\t}\n\tif (currentGroup) {\n\t\tyield currentGroup;\n\t}\n}\n\n/**\n * Interface for text that provides lines.\n */\nexport interface IText {\n\treadonly lineCount: number;\n\tgetLineContent(lineNumber: number): string;\n}\n\nexport class ArrayText implements IText {\n\tconstructor(public readonly lines: string[]) {}\n\n\tget lineCount(): number {\n\t\treturn this.lines.length;\n\t}\n\n\tgetLineContent(lineNumber: number): string {\n\t\treturn this.lines[lineNumber - 1];\n\t}\n}\n","import { OffsetRange } from '../core/offsetRange.js';\nimport { SequenceDiff, ITimeout, InfiniteTimeout, DateTimeout } from '../algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from '../algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from '../algorithms/myersDiffAlgorithm.js';\nimport {\n\toptimizeSequenceDiffs,\n\textendDiffsToEntireWordIfAppropriate,\n\tremoveShortMatches,\n\tremoveVeryShortMatchingLinesBetweenDiffs,\n\tremoveVeryShortMatchingTextBetweenLongDiffs,\n} from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence, Range } from './linesSliceCharSequence.js';\nimport {\n\tLineRange,\n\tRangeMapping,\n\tLineRangeMapping,\n\tDetailedLineRangeMapping,\n\tLinesDiff,\n\tArrayText,\n\tlineRangeMappingFromRangeMappings,\n} from './rangeMapping.js';\n\nexport { DateTimeout, InfiniteTimeout, ITimeout } from '../algorithms/diffAlgorithm.js';\nexport { LineRange, RangeMapping, LineRangeMapping, DetailedLineRangeMapping, LinesDiff } from './rangeMapping.js';\nexport { Range, Position } from './linesSliceCharSequence.js';\n\n/**\n * Options for the lines diff computer.\n */\nexport interface ILinesDiffComputerOptions {\n\t/**\n\t * Maximum computation time in milliseconds. 0 means no timeout.\n\t */\n\tmaxComputationTimeMs: number;\n\n\t/**\n\t * Whether to ignore leading and trailing whitespace.\n\t */\n\tignoreTrimWhitespace: boolean;\n\n\t/**\n\t * Whether to compute moved text detection.\n\t */\n\tcomputeMoves: boolean;\n\n\t/**\n\t * Whether to extend diffs to subword boundaries.\n\t */\n\textendToSubwords: boolean;\n}\n\n/**\n * The main diff computer that computes detailed line diffs.\n */\nexport class DefaultLinesDiffComputer {\n\tprivate readonly _dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n\tprivate readonly _myersDiffingAlgorithm = new MyersDiffAlgorithm();\n\n\tcomputeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {\n\t\t// Handle identical single line\n\t\tif (originalLines.length <= 1 && arraysEqual(originalLines, modifiedLines)) {\n\t\t\treturn new LinesDiff([], [], false);\n\t\t}\n\n\t\t// Handle empty single line - treat as full replacement\n\t\tif (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n\t\t\treturn new LinesDiff([\n\t\t\t\tnew DetailedLineRangeMapping(\n\t\t\t\t\tnew LineRange(1, originalLines.length + 1),\n\t\t\t\t\tnew LineRange(1, modifiedLines.length + 1),\n\t\t\t\t\t[\n\t\t\t\t\t\tnew RangeMapping(\n\t\t\t\t\t\t\tnew Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1),\n\t\t\t\t\t\t\tnew Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1),\n\t\t\t\t\t\t)\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t], [], false);\n\t\t}\n\n\t\tconst timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n\t\tconst considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n\n\t\t// Create perfect hash for lines (trimmed)\n\t\tconst perfectHashes = new Map<string, number>();\n\t\tfunction getOrCreateHash(text: string): number {\n\t\t\tlet hash = perfectHashes.get(text);\n\t\t\tif (hash === undefined) {\n\t\t\t\thash = perfectHashes.size;\n\t\t\t\tperfectHashes.set(text, hash);\n\t\t\t}\n\t\t\treturn hash;\n\t\t}\n\n\t\tconst originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n\t\tconst modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n\n\t\tconst sequence1 = new LineSequence(originalLinesHashes, originalLines);\n\t\tconst sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n\n\t\t// Choose algorithm based on size\n\t\tconst lineAlignmentResult = (() => {\n\t\t\tif (sequence1.length + sequence2.length < 1700) {\n\t\t\t\t// Use the improved algorithm for small files\n\t\t\t\treturn this._dynamicProgrammingDiffing.compute(\n\t\t\t\t\tsequence1,\n\t\t\t\t\tsequence2,\n\t\t\t\t\ttimeout,\n\t\t\t\t\t(offset1, offset2) =>\n\t\t\t\t\t\toriginalLines[offset1] === modifiedLines[offset2]\n\t\t\t\t\t\t\t? modifiedLines[offset2].length === 0\n\t\t\t\t\t\t\t\t? 0.1\n\t\t\t\t\t\t\t\t: 1 + Math.log(1 + modifiedLines[offset2].length)\n\t\t\t\t\t\t\t: 0.99\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn this._myersDiffingAlgorithm.compute(\n\t\t\t\tsequence1,\n\t\t\t\tsequence2,\n\t\t\t\ttimeout\n\t\t\t);\n\t\t})();\n\n\t\tlet lineAlignments = lineAlignmentResult.diffs;\n\t\tlet hitTimeout = lineAlignmentResult.hitTimeout;\n\n\t\t// Apply heuristics\n\t\tlineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n\t\tlineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n\n\t\tconst alignments: RangeMapping[] = [];\n\n\t\tconst scanForWhitespaceChanges = (equalLinesCount: number) => {\n\t\t\tif (!considerWhitespaceChanges) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < equalLinesCount; i++) {\n\t\t\t\tconst seq1Offset = seq1LastStart + i;\n\t\t\t\tconst seq2Offset = seq2LastStart + i;\n\t\t\t\tif (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n\t\t\t\t\t// This is because of whitespace changes, diff these lines\n\t\t\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, new SequenceDiff(\n\t\t\t\t\t\tnew OffsetRange(seq1Offset, seq1Offset + 1),\n\t\t\t\t\t\tnew OffsetRange(seq2Offset, seq2Offset + 1),\n\t\t\t\t\t), timeout, considerWhitespaceChanges, options);\n\t\t\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\t\t\talignments.push(a);\n\t\t\t\t\t}\n\t\t\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\t\t\thitTimeout = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tlet seq1LastStart = 0;\n\t\tlet seq2LastStart = 0;\n\n\t\tfor (const diff of lineAlignments) {\n\t\t\tconst equalLinesCount = diff.seq1Range.start - seq1LastStart;\n\n\t\t\tscanForWhitespaceChanges(equalLinesCount);\n\n\t\t\tseq1LastStart = diff.seq1Range.endExclusive;\n\t\t\tseq2LastStart = diff.seq2Range.endExclusive;\n\n\t\t\tconst characterDiffs = this._refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);\n\t\t\tif (characterDiffs.hitTimeout) {\n\t\t\t\thitTimeout = true;\n\t\t\t}\n\t\t\tfor (const a of characterDiffs.mappings) {\n\t\t\t\talignments.push(a);\n\t\t\t}\n\t\t}\n\n\t\tscanForWhitespaceChanges(originalLines.length - seq1LastStart);\n\n\t\tconst original = new ArrayText(originalLines);\n\t\tconst modified = new ArrayText(modifiedLines);\n\n\t\tconst changes = lineRangeMappingFromRangeMappings(alignments, original.lines, modified.lines);\n\n\t\t// TODO: Compute moves if options.computeMoves is true\n\t\tconst moves: never[] = [];\n\n\t\treturn new LinesDiff(changes, moves, hitTimeout);\n\t}\n\n\tprivate _refineDiff(\n\t\toriginalLines: string[],\n\t\tmodifiedLines: string[],\n\t\tdiff: SequenceDiff,\n\t\ttimeout: ITimeout,\n\t\tconsiderWhitespaceChanges: boolean,\n\t\toptions: ILinesDiffComputerOptions\n\t): { mappings: RangeMapping[]; hitTimeout: boolean } {\n\t\tconst lineRangeMapping = toLineRangeMapping(diff);\n\t\tconst rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n\n\t\tconst slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n\t\tconst slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n\n\t\tconst diffResult = slice1.length + slice2.length < 500\n\t\t\t? this._dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n\t\t\t: this._myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n\n\t\tlet diffs = diffResult.diffs;\n\t\tdiffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findWordContaining(idx));\n\n\t\tif (options.extendToSubwords) {\n\t\t\tdiffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, (seq, idx) => seq.findSubWordContaining(idx), true);\n\t\t}\n\n\t\tdiffs = removeShortMatches(slice1, slice2, diffs);\n\t\tdiffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n\n\t\tconst result = diffs.map(\n\t\t\t(d) =>\n\t\t\t\tnew RangeMapping(\n\t\t\t\t\tslice1.translateRange(d.seq1Range),\n\t\t\t\t\tslice2.translateRange(d.seq2Range)\n\t\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tmappings: result,\n\t\t\thitTimeout: diffResult.hitTimeout,\n\t\t};\n\t}\n}\n\nfunction toLineRangeMapping(sequenceDiff: SequenceDiff) {\n\treturn new LineRangeMapping(\n\t\tnew LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1),\n\t\tnew LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1),\n\t);\n}\n\nfunction arraysEqual<T>(a: T[], b: T[]): boolean {\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n","/* @ts-self-types=\"./diff_wasm.d.ts\" */\n\n/**\n * Compute a diff between two texts.\n *\n * # Arguments\n * * `original` - The original text (lines separated by newlines)\n * * `modified` - The modified text (lines separated by newlines)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {string} original\n * @param {string} modified\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiff(original, modified, options) {\n const ptr0 = passStringToWasm0(original, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(modified, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.computeDiff(ptr0, len0, ptr1, len1, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Compute a diff between two arrays of lines.\n *\n * # Arguments\n * * `original_lines` - The original lines (as a JavaScript array of strings)\n * * `modified_lines` - The modified lines (as a JavaScript array of strings)\n * * `options` - Optional diff options (as a JavaScript object)\n *\n * # Returns\n * A `WasmLinesDiff` object containing the changes.\n * @param {any} original_lines\n * @param {any} modified_lines\n * @param {any} options\n * @returns {any}\n */\nexport function computeDiffLines(original_lines, modified_lines, options) {\n const ret = wasm.computeDiffLines(original_lines, modified_lines, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * Initialize panic hook for better error messages in the browser console.\n */\nexport function init() {\n wasm.init();\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_ef53bc310eb298a0: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Number_6b506e6536831eaa: function(arg0) {\n const ret = Number(arg0);\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_38130e98eecd467d: function(arg0, arg1) {\n const v = arg1;\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_1a45e2c38d4d41b9: function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_0accd80f45e5faa2: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_70a403a56e771704: function(arg0, arg1) {\n const ret = arg0 in arg1;\n return ret;\n },\n __wbg___wbindgen_is_bigint_6ffd6468a9bc44b9: function(arg0) {\n const ret = typeof(arg0) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_754e9f305ff6029e: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_87c3bfe968c6a5ad: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_object_56732c2bc353f41d: function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_undefined_67b456be8673d3d7: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_1068e624fa87f6ab: function(arg0, arg1) {\n const ret = arg0 === arg1;\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_2c56564c75129511: function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n },\n __wbg___wbindgen_number_get_9bb1761122181af2: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_72bdf95d3ae505b1: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_1506f2235d1bdba0: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_8a89609d89f6608a: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_done_60cf307fcc680536: function(arg0) {\n const ret = arg0.done;\n return ret;\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_1f8f054ddbaa7db2: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_unchecked_33f6e5c9e2f2d6b2: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = arg0[arg1];\n return ret;\n },\n __wbg_instanceof_ArrayBuffer_8f49811467741499: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_86f30649f63ef9c2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_67c2c9c4313f4448: function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n },\n __wbg_isSafeInteger_66acec27e09e99a7: function(arg0) {\n const ret = Number.isSafeInteger(arg0);\n return ret;\n },\n __wbg_iterator_8732428d309e270e: function() {\n const ret = Symbol.iterator;\n return ret;\n },\n __wbg_length_4a591ecaa01354d9: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_length_66f1a4b2e9026940: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_578aeef4b6b94378: function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n },\n __wbg_new_ce1ab61c1c2b300d: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_d90091b82fdf5b91: function() {\n const ret = new Array();\n return ret;\n },\n __wbg_next_9e03acdf51c4960d: function(arg0) {\n const ret = arg0.next;\n return ret;\n },\n __wbg_next_eb8ca7351fa27906: function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments); },\n __wbg_now_190933fa139cc119: function() {\n const ret = Date.now();\n return ret;\n },\n __wbg_prototypesetcall_3249fc62a0fafa30: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n },\n __wbg_set_dca99999bba88a9a: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_f3625092ee4b37f4: function(arg0) {\n const ret = arg0.value;\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./diff_wasm_bg.js\": import0,\n };\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('diff_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","/**\n * WASM module loader.\n *\n * Handles async initialization of the WASM module.\n */\n\nimport type { WasmModule } from './types.js';\n// @ts-ignore -- generated at build time by `npm run build:wasm` (wasm-pack --target web).\nimport * as wasm from '../../../out/pkg/diff_wasm.js';\n\nlet wasmModule: WasmModule | null = null;\nlet initPromise: Promise<WasmModule> | null = null;\n\n/**\n * Initialize the WASM module.\n *\n * This must be called before using any WASM-based diff functions.\n * It's safe to call multiple times — subsequent calls are no-ops.\n *\n * @returns Promise that resolves when WASM is ready\n */\nexport async function initWasm(): Promise<WasmModule> {\n\tif (wasmModule) {\n\t\treturn wasmModule;\n\t}\n\tif (initPromise) {\n\t\treturn initPromise;\n\t}\n\n\tinitPromise = (async () => {\n\t\tconst wasmUrl = new URL('../../../out/pkg/diff_wasm_bg.wasm', import.meta.url);\n\t\t// Node's undici fetch does not support file:// URLs, so read bytes ourselves.\n\t\tlet source: BufferSource | URL = wasmUrl;\n\t\tif (typeof process !== 'undefined' && process.versions?.node) {\n\t\t\tconst { readFile } = await import('node:fs/promises');\n\t\t\tsource = await readFile(wasmUrl);\n\t\t}\n\t\tawait wasm.default({ module_or_path: source });\n\t\twasm.init();\n\t\twasmModule = wasm as unknown as WasmModule;\n\t\treturn wasmModule;\n\t})();\n\n\treturn initPromise;\n}\n\n/**\n * Get the WASM module synchronously.\n * \n * @throws Error if WASM hasn't been initialized yet\n * @returns The WASM module\n */\nexport function getWasm(): WasmModule {\n\tif (!wasmModule) {\n\t\tthrow new Error('WASM not initialized. Call initWasm() first and await it.');\n\t}\n\treturn wasmModule;\n}\n\n/**\n * Check if the WASM module is initialized.\n */\nexport function isWasmInitialized(): boolean {\n\treturn wasmModule !== null;\n}\n\n/**\n * Reset the WASM module (useful for testing).\n * @internal\n */\nexport function resetWasm(): void {\n\twasmModule = null;\n\tinitPromise = null;\n}\n","/**\n * Conversions between `LinesDiff` (in-memory class instances) and\n * `WireLinesDiff` (plain JSON-friendly shape used on the worker boundary).\n */\n\nimport {\n LinesDiff,\n DetailedLineRangeMapping,\n LineRange,\n LineRangeMapping,\n MovedText,\n RangeMapping,\n} from '../defaultLinesDiffComputer/rangeMapping.js';\nimport { Range } from '../defaultLinesDiffComputer/linesSliceCharSequence.js';\nimport type {\n WasmDetailedLineRangeMapping,\n WasmRangeMapping,\n} from '../wasm/types.js';\nimport type { WireLinesDiff, WireMovedText } from './protocol.js';\n\nexport function linesDiffToWire(diff: LinesDiff): WireLinesDiff {\n return {\n changes: diff.changes.map(detailedToWire),\n moves: diff.moves.map(moveToWire),\n hitTimeout: diff.hitTimeout,\n };\n}\n\nexport function wireToLinesDiff(wire: WireLinesDiff): LinesDiff {\n const changes = wire.changes.map(wireToDetailed);\n const moves = wire.moves.map(wireToMove);\n return new LinesDiff(changes, moves, wire.hitTimeout);\n}\n\nfunction detailedToWire(m: DetailedLineRangeMapping): WasmDetailedLineRangeMapping {\n return {\n original: {\n startLineNumber: m.original.startLineNumber,\n endLineNumberExclusive: m.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.modified.startLineNumber,\n endLineNumberExclusive: m.modified.endLineNumberExclusive,\n },\n innerChanges: m.innerChanges ? m.innerChanges.map(rangeMappingToWire) : null,\n };\n}\n\nfunction wireToDetailed(m: WasmDetailedLineRangeMapping): DetailedLineRangeMapping {\n const inner = m.innerChanges?.map(wireToRangeMapping);\n return new DetailedLineRangeMapping(\n new LineRange(m.original.startLineNumber, m.original.endLineNumberExclusive),\n new LineRange(m.modified.startLineNumber, m.modified.endLineNumberExclusive),\n inner,\n );\n}\n\nfunction rangeMappingToWire(rm: RangeMapping): WasmRangeMapping {\n return {\n originalStartLine: rm.originalRange.startLineNumber,\n originalStartColumn: rm.originalRange.startColumn,\n originalEndLine: rm.originalRange.endLineNumber,\n originalEndColumn: rm.originalRange.endColumn,\n modifiedStartLine: rm.modifiedRange.startLineNumber,\n modifiedStartColumn: rm.modifiedRange.startColumn,\n modifiedEndLine: rm.modifiedRange.endLineNumber,\n modifiedEndColumn: rm.modifiedRange.endColumn,\n };\n}\n\nfunction wireToRangeMapping(rm: WasmRangeMapping): RangeMapping {\n return new RangeMapping(\n new Range(rm.originalStartLine, rm.originalStartColumn, rm.originalEndLine, rm.originalEndColumn),\n new Range(rm.modifiedStartLine, rm.modifiedStartColumn, rm.modifiedEndLine, rm.modifiedEndColumn),\n );\n}\n\nfunction moveToWire(m: MovedText): WireMovedText {\n return {\n lineRangeMapping: {\n original: {\n startLineNumber: m.lineRangeMapping.original.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.original.endLineNumberExclusive,\n },\n modified: {\n startLineNumber: m.lineRangeMapping.modified.startLineNumber,\n endLineNumberExclusive: m.lineRangeMapping.modified.endLineNumberExclusive,\n },\n },\n changes: m.changes.map(detailedToWire),\n };\n}\n\nfunction wireToMove(m: WireMovedText): MovedText {\n const lrm = new LineRangeMapping(\n new LineRange(m.lineRangeMapping.original.startLineNumber, m.lineRangeMapping.original.endLineNumberExclusive),\n new LineRange(m.lineRangeMapping.modified.startLineNumber, m.lineRangeMapping.modified.endLineNumberExclusive),\n );\n return new MovedText(lrm, m.changes.map(wireToDetailed));\n}\n"],"names":["CharCode","wasm.default","wasm.init","wasm"],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|