django-vue3-admin-web/node_modules/ace-builds/src-noconflict/ext-diff.js
2025-10-20 21:21:14 +08:00

4258 lines
189 KiB
JavaScript

ace.define("ace/ext/diff/scroll_diff_decorator",["require","exports","module","ace/layer/decorators"], function(require, exports, module){var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var Decorator = require("../../layer/decorators").Decorator;
var ScrollDiffDecorator = /** @class */ (function (_super) {
__extends(ScrollDiffDecorator, _super);
function ScrollDiffDecorator(scrollbarV, renderer, forInlineDiff) {
var _this = _super.call(this, scrollbarV, renderer) || this;
_this.colors.dark["delete"] = "rgba(255, 18, 18, 1)";
_this.colors.dark["insert"] = "rgba(18, 136, 18, 1)";
_this.colors.light["delete"] = "rgb(255,51,51)";
_this.colors.light["insert"] = "rgb(32,133,72)";
_this.$zones = [];
_this.$forInlineDiff = forInlineDiff;
return _this;
}
ScrollDiffDecorator.prototype.addZone = function (startRow, endRow, type) {
this.$zones.push({
startRow: startRow,
endRow: endRow,
type: type
});
};
ScrollDiffDecorator.prototype.setSessions = function (sessionA, sessionB) {
this.sessionA = sessionA;
this.sessionB = sessionB;
};
ScrollDiffDecorator.prototype.$updateDecorators = function (config) {
if (typeof this.canvas.getContext !== "function") {
return;
}
_super.prototype.$updateDecorators.call(this, config);
if (this.$zones.length > 0) {
var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;
var ctx = this.canvas.getContext("2d");
this.$setDiffDecorators(ctx, colors);
}
};
ScrollDiffDecorator.prototype.$transformPosition = function (row, type) {
if (type == "delete") {
return this.sessionA.documentToScreenRow(row, 0);
}
else {
return this.sessionB.documentToScreenRow(row, 0);
}
};
ScrollDiffDecorator.prototype.$setDiffDecorators = function (ctx, colors) {
var e_1, _a;
var _this = this;
function compare(a, b) {
if (a.from === b.from) {
return a.to - b.to;
}
return a.from - b.from;
}
var zones = this.$zones;
if (zones) {
var resolvedZones = [];
var deleteZones = zones.filter(function (z) { return z.type === "delete"; });
var insertZones = zones.filter(function (z) { return z.type === "insert"; });
[deleteZones, insertZones].forEach(function (typeZones) {
typeZones.forEach(function (zone, i) {
var offset1 = _this.$transformPosition(zone.startRow, zone.type) * _this.lineHeight;
var offset2 = _this.$transformPosition(zone.endRow, zone.type) * _this.lineHeight + _this.lineHeight;
var y1 = Math.round(_this.heightRatio * offset1);
var y2 = Math.round(_this.heightRatio * offset2);
var padding = 1;
var ycenter = Math.round((y1 + y2) / 2);
var halfHeight = (y2 - ycenter);
if (halfHeight < _this.halfMinDecorationHeight) {
halfHeight = _this.halfMinDecorationHeight;
}
var previousZone = resolvedZones[resolvedZones.length - 1];
if (i > 0 && previousZone && previousZone.type === zone.type && ycenter - halfHeight < previousZone.to + padding) {
ycenter = resolvedZones[resolvedZones.length - 1].to + padding + halfHeight;
}
if (ycenter - halfHeight < 0) {
ycenter = halfHeight;
}
if (ycenter + halfHeight > _this.canvasHeight) {
ycenter = _this.canvasHeight - halfHeight;
}
resolvedZones.push({
type: zone.type,
from: ycenter - halfHeight,
to: ycenter + halfHeight,
color: colors[zone.type] || null
});
});
});
resolvedZones = resolvedZones.sort(compare);
try {
for (var resolvedZones_1 = __values(resolvedZones), resolvedZones_1_1 = resolvedZones_1.next(); !resolvedZones_1_1.done; resolvedZones_1_1 = resolvedZones_1.next()) {
var zone = resolvedZones_1_1.value;
ctx.fillStyle = zone.color || null;
var zoneFrom = zone.from;
var zoneTo = zone.to;
var zoneHeight = zoneTo - zoneFrom;
if (this.$forInlineDiff) {
ctx.fillRect(this.oneZoneWidth, zoneFrom, 2 * this.oneZoneWidth, zoneHeight);
}
else {
if (zone.type == "delete") {
ctx.fillRect(this.oneZoneWidth, zoneFrom, this.oneZoneWidth, zoneHeight);
}
else {
ctx.fillRect(2 * this.oneZoneWidth, zoneFrom, this.oneZoneWidth, zoneHeight);
}
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (resolvedZones_1_1 && !resolvedZones_1_1.done && (_a = resolvedZones_1.return)) _a.call(resolvedZones_1);
}
finally { if (e_1) throw e_1.error; }
}
}
};
ScrollDiffDecorator.prototype.setZoneWidth = function () {
this.oneZoneWidth = Math.round(this.canvasWidth / 3);
};
return ScrollDiffDecorator;
}(Decorator));
exports.ScrollDiffDecorator = ScrollDiffDecorator;
});
ace.define("ace/ext/diff/styles-css.js",["require","exports","module"], function(require, exports, module){exports.cssText = "\n/*\n * Line Markers\n */\n.ace_diff {\n position: absolute;\n z-index: 0;\n}\n.ace_diff.inline {\n z-index: 20;\n}\n/*\n * Light Colors \n */\n.ace_diff.insert {\n background-color: #EFFFF1;\n}\n.ace_diff.delete {\n background-color: #FFF1F1;\n}\n.ace_diff.aligned_diff {\n background: rgba(206, 194, 191, 0.26);\n background: repeating-linear-gradient(\n 45deg,\n rgba(122, 111, 108, 0.26),\n rgba(122, 111, 108, 0.26) 5px,\n rgba(0, 0, 0, 0) 5px,\n rgba(0, 0, 0, 0) 10px \n );\n}\n\n.ace_diff.insert.inline {\n background-color: rgb(74 251 74 / 18%); \n}\n.ace_diff.delete.inline {\n background-color: rgb(251 74 74 / 15%);\n}\n\n.ace_diff.delete.inline.empty {\n background-color: rgba(255, 128, 79, 0.7);\n width: 2px !important;\n}\n\n.ace_diff.insert.inline.empty {\n background-color: rgba(49, 230, 96, 0.7);\n width: 2px !important;\n}\n\n.ace_diff-active-line {\n border-bottom: 1px solid;\n border-top: 1px solid;\n background: transparent;\n position: absolute;\n box-sizing: border-box;\n border-color: #9191ac;\n}\n\n.ace_dark .ace_diff-active-line {\n background: transparent;\n border-color: #75777a;\n}\n \n\n/* gutter changes */\n.ace_mini-diff_gutter-enabled > .ace_gutter-cell,\n.ace_mini-diff_gutter-enabled > .ace_gutter-cell_svg-icons {\n padding-right: 13px;\n}\n\n.ace_mini-diff_gutter_other > .ace_gutter-cell,\n.ace_mini-diff_gutter_other > .ace_gutter-cell_svg-icons {\n display: none;\n}\n\n.ace_mini-diff_gutter_other {\n pointer-events: none;\n}\n\n\n.ace_mini-diff_gutter-enabled > .mini-diff-added {\n background-color: #EFFFF1;\n border-left: 3px solid #2BB534;\n padding-left: 16px;\n display: block;\n}\n\n.ace_mini-diff_gutter-enabled > .mini-diff-deleted {\n background-color: #FFF1F1;\n border-left: 3px solid #EA7158;\n padding-left: 16px;\n display: block;\n}\n\n\n.ace_mini-diff_gutter-enabled > .mini-diff-added:after {\n position: absolute;\n right: 2px;\n content: \"+\";\n background-color: inherit;\n}\n\n.ace_mini-diff_gutter-enabled > .mini-diff-deleted:after {\n position: absolute;\n right: 2px;\n content: \"-\";\n background-color: inherit;\n}\n.ace_fade-fold-widgets:hover > .ace_folding-enabled > .mini-diff-added:after,\n.ace_fade-fold-widgets:hover > .ace_folding-enabled > .mini-diff-deleted:after {\n display: none;\n}\n\n.ace_diff_other .ace_selection {\n filter: drop-shadow(1px 2px 3px darkgray);\n}\n\n.ace_hidden_marker-layer .ace_bracket,\n.ace_hidden_marker-layer .ace_error_bracket {\n display: none;\n}\n\n\n\n/*\n * Dark Colors \n */\n\n.ace_dark .ace_diff.insert {\n background-color: #212E25;\n}\n.ace_dark .ace_diff.delete {\n background-color: #3F2222;\n}\n\n.ace_dark .ace_mini-diff_gutter-enabled > .mini-diff-added {\n background-color: #212E25;\n border-left-color:#00802F;\n}\n\n.ace_dark .ace_mini-diff_gutter-enabled > .mini-diff-deleted {\n background-color: #3F2222;\n border-left-color: #9C3838;\n}\n\n";
});
ace.define("ace/ext/diff/gutter_decorator",["require","exports","module","ace/lib/dom"], function(require, exports, module){var dom = require("../../lib/dom");
var MinimalGutterDiffDecorator = /** @class */ (function () {
function MinimalGutterDiffDecorator(editor, type) {
this.gutterClass = "ace_mini-diff_gutter-enabled";
this.gutterCellsClasses = {
add: "mini-diff-added",
delete: "mini-diff-deleted",
};
this.editor = editor;
this.type = type;
this.chunks = [];
this.attachToEditor();
}
MinimalGutterDiffDecorator.prototype.attachToEditor = function () {
this.renderGutters = this.renderGutters.bind(this);
dom.addCssClass(this.editor.renderer.$gutterLayer.element, this.gutterClass);
this.editor.renderer.$gutterLayer.on("afterRender", this.renderGutters);
};
MinimalGutterDiffDecorator.prototype.renderGutters = function (e, gutterLayer) {
var _this = this;
var cells = this.editor.renderer.$gutterLayer.$lines.cells;
cells.forEach(function (cell) {
cell.element.classList.remove(Object.values(_this.gutterCellsClasses));
});
var dir = this.type === -1 ? "old" : "new";
var diffClass = this.type === -1 ? this.gutterCellsClasses.delete : this.gutterCellsClasses.add;
this.chunks.forEach(function (lineChange) {
var startRow = lineChange[dir].start.row;
var endRow = lineChange[dir].end.row - 1;
cells.forEach(function (cell) {
if (cell.row >= startRow && cell.row <= endRow) {
cell.element.classList.add(diffClass);
}
});
});
};
MinimalGutterDiffDecorator.prototype.setDecorations = function (changes) {
this.chunks = changes;
this.renderGutters();
};
MinimalGutterDiffDecorator.prototype.dispose = function () {
dom.removeCssClass(this.editor.renderer.$gutterLayer.element, this.gutterClass);
this.editor.renderer.$gutterLayer.off("afterRender", this.renderGutters);
};
return MinimalGutterDiffDecorator;
}());
exports.MinimalGutterDiffDecorator = MinimalGutterDiffDecorator;
});
ace.define("ace/ext/diff/base_diff_view",["require","exports","module","ace/lib/oop","ace/range","ace/lib/dom","ace/config","ace/line_widgets","ace/ext/diff/scroll_diff_decorator","ace/ext/diff/styles-css.js","ace/editor","ace/virtual_renderer","ace/undomanager","ace/layer/decorators","ace/theme/textmate","ace/multi_select","ace/edit_session","ace/ext/diff/gutter_decorator"], function(require, exports, module){"use strict";
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var oop = require("../../lib/oop");
var Range = require("../../range").Range;
var dom = require("../../lib/dom");
var config = require("../../config");
var LineWidgets = require("../../line_widgets").LineWidgets;
var ScrollDiffDecorator = require("./scroll_diff_decorator").ScrollDiffDecorator;
var css = require("./styles-css.js").cssText;
var Editor = require("../../editor").Editor;
var Renderer = require("../../virtual_renderer").VirtualRenderer;
var UndoManager = require("../../undomanager").UndoManager;
var Decorator = require("../../layer/decorators").Decorator;
require("../../theme/textmate");
require("../../multi_select");
var EditSession = require("../../edit_session").EditSession;
var MinimalGutterDiffDecorator = require("./gutter_decorator").MinimalGutterDiffDecorator;
var dummyDiffProvider = {
compute: function (val1, val2, options) {
return [];
}
};
dom.importCssString(css, "diffview.css");
var BaseDiffView = /** @class */ (function () {
function BaseDiffView(inlineDiffEditor, container) {
this.onChangeTheme = this.onChangeTheme.bind(this);
this.onInput = this.onInput.bind(this);
this.onChangeFold = this.onChangeFold.bind(this);
this.realign = this.realign.bind(this);
this.onSelect = this.onSelect.bind(this);
this.onChangeWrapLimit = this.onChangeWrapLimit.bind(this);
this.realignPending = false; this.diffSession; this.chunks;
this.inlineDiffEditor = inlineDiffEditor || false;
this.currentDiffIndex = 0;
this.diffProvider = dummyDiffProvider;
if (container) {
this.container = container;
}
this.$ignoreTrimWhitespace = false;
this.$maxDiffs = 5000;
this.$maxComputationTimeMs = 150;
this.$syncSelections = false;
this.$foldUnchangedOnInput = false;
this.markerB = new DiffHighlight(this, 1);
this.markerA = new DiffHighlight(this, -1);
}
BaseDiffView.prototype.$setupModels = function (diffModel) {
if (diffModel.diffProvider) {
this.setProvider(diffModel.diffProvider);
}
this.showSideA = diffModel.inline == undefined ? true : diffModel.inline === "a";
var diffEditorOptions = /**@type {Partial<import("../../../ace-internal").Ace.EditorOptions>}*/ ({
scrollPastEnd: 0.5,
highlightActiveLine: false,
highlightGutterLine: false,
animatedScroll: true,
customScrollbar: true,
vScrollBarAlwaysVisible: true,
fadeFoldWidgets: true,
showFoldWidgets: true,
selectionStyle: "text",
});
this.savedOptionsA = diffModel.editorA && diffModel.editorA.getOptions(diffEditorOptions);
this.savedOptionsB = diffModel.editorB && diffModel.editorB.getOptions(diffEditorOptions);
if (!this.inlineDiffEditor || diffModel.inline === "a") {
this.editorA = diffModel.editorA || this.$setupModel(diffModel.sessionA, diffModel.valueA);
this.container && this.container.appendChild(this.editorA.container);
this.editorA.setOptions(diffEditorOptions);
}
if (!this.inlineDiffEditor || diffModel.inline === "b") {
this.editorB = diffModel.editorB || this.$setupModel(diffModel.sessionB, diffModel.valueB);
this.container && this.container.appendChild(this.editorB.container);
this.editorB.setOptions(diffEditorOptions);
}
if (this.inlineDiffEditor) {
this.activeEditor = this.showSideA ? this.editorA : this.editorB;
this.otherSession = this.showSideA ? this.sessionB : this.sessionA;
var cloneOptions = this.activeEditor.getOptions();
cloneOptions.readOnly = true;
delete cloneOptions.mode;
this.otherEditor = new Editor(new Renderer(null), undefined, cloneOptions);
if (this.showSideA) {
this.editorB = this.otherEditor;
}
else {
this.editorA = this.otherEditor;
}
}
this.setDiffSession({
sessionA: diffModel.sessionA || (diffModel.editorA ? diffModel.editorA.session : new EditSession(diffModel.valueA || "")),
sessionB: diffModel.sessionB || (diffModel.editorB ? diffModel.editorB.session : new EditSession(diffModel.valueB || "")),
chunks: []
});
this.setupScrollbars();
};
BaseDiffView.prototype.addGutterDecorators = function () {
if (!this.gutterDecoratorA)
this.gutterDecoratorA = new MinimalGutterDiffDecorator(this.editorA, -1);
if (!this.gutterDecoratorB)
this.gutterDecoratorB = new MinimalGutterDiffDecorator(this.editorB, 1);
};
BaseDiffView.prototype.$setupModel = function (session, value) {
var editor = new Editor(new Renderer(), session);
editor.session.setUndoManager(new UndoManager());
if (value != undefined) {
editor.setValue(value, -1);
}
return editor;
};
BaseDiffView.prototype.foldUnchanged = function () {
var chunks = this.chunks;
var placeholder = "-".repeat(120);
var prev = {
old: new Range(0, 0, 0, 0),
new: new Range(0, 0, 0, 0)
};
var foldsChanged = false;
for (var i = 0; i < chunks.length + 1; i++) {
var current = chunks[i] || {
old: new Range(this.sessionA.getLength(), 0, this.sessionA.getLength(), 0),
new: new Range(this.sessionB.getLength(), 0, this.sessionB.getLength(), 0)
};
var l = current.new.start.row - prev.new.end.row - 5;
if (l > 2) {
var s = prev.old.end.row + 2;
var fold1 = this.sessionA.addFold(placeholder, new Range(s, 0, s + l, Number.MAX_VALUE));
s = prev.new.end.row + 2;
var fold2 = this.sessionB.addFold(placeholder, new Range(s, 0, s + l, Number.MAX_VALUE));
if (fold1 || fold2)
foldsChanged = true;
if (fold2 && fold1) {
fold1["other"] = fold2;
fold2["other"] = fold1;
}
}
prev = current;
}
return foldsChanged;
};
BaseDiffView.prototype.unfoldUnchanged = function () {
var folds = this.sessionA.getAllFolds();
for (var i = folds.length - 1; i >= 0; i--) {
var fold = folds[i];
if (fold.placeholder.length == 120) {
this.sessionA.removeFold(fold);
}
}
};
BaseDiffView.prototype.toggleFoldUnchanged = function () {
if (!this.foldUnchanged()) {
this.unfoldUnchanged();
}
};
BaseDiffView.prototype.setDiffSession = function (session) {
if (this.diffSession) {
this.$detachSessionsEventHandlers();
this.clearSelectionMarkers();
}
this.diffSession = session;
this.sessionA = this.sessionB = null;
if (this.diffSession) {
this.chunks = this.diffSession.chunks || [];
this.editorA && this.editorA.setSession(session.sessionA);
this.editorB && this.editorB.setSession(session.sessionB);
this.sessionA = this.diffSession.sessionA;
this.sessionB = this.diffSession.sessionB;
this.$attachSessionsEventHandlers();
this.initSelectionMarkers();
}
this.otherSession = this.showSideA ? this.sessionB : this.sessionA;
};
BaseDiffView.prototype.$attachSessionsEventHandlers = function () {
};
BaseDiffView.prototype.$detachSessionsEventHandlers = function () {
};
BaseDiffView.prototype.getDiffSession = function () {
return this.diffSession;
};
BaseDiffView.prototype.setTheme = function (theme) {
this.editorA && this.editorA.setTheme(theme);
this.editorB && this.editorB.setTheme(theme);
};
BaseDiffView.prototype.getTheme = function () {
return (this.editorA || this.editorB).getTheme();
};
BaseDiffView.prototype.onChangeTheme = function (e) {
var theme = e && e.theme || this.getTheme();
if (this.editorA && this.editorA.getTheme() !== theme) {
this.editorA.setTheme(theme);
}
if (this.editorB && this.editorB.getTheme() !== theme) {
this.editorB.setTheme(theme);
}
};
BaseDiffView.prototype.resize = function (force) {
this.editorA && this.editorA.resize(force);
this.editorB && this.editorB.resize(force);
};
BaseDiffView.prototype.scheduleOnInput = function () {
var _this = this;
if (this.$onInputTimer)
return;
this.$onInputTimer = setTimeout(function () {
_this.$onInputTimer = null;
_this.onInput();
});
};
BaseDiffView.prototype.onInput = function () {
var _this = this;
if (this.$onInputTimer)
clearTimeout(this.$onInputTimer);
var val1 = this.sessionA.doc.getAllLines();
var val2 = this.sessionB.doc.getAllLines();
this.selectionRangeA = null;
this.selectionRangeB = null;
var chunks = this.$diffLines(val1, val2);
this.diffSession.chunks = this.chunks = chunks;
this.gutterDecoratorA && this.gutterDecoratorA.setDecorations(chunks);
this.gutterDecoratorB && this.gutterDecoratorB.setDecorations(chunks);
if (this.chunks && this.chunks.length > this.$maxDiffs) {
return;
}
this.align();
this.editorA && this.editorA.renderer.updateBackMarkers();
this.editorB && this.editorB.renderer.updateBackMarkers();
setTimeout(function () {
_this.updateScrollBarDecorators();
}, 0);
if (this.$foldUnchangedOnInput) {
this.foldUnchanged();
}
};
BaseDiffView.prototype.setupScrollbars = function () {
var _this = this;
var setupScrollBar = function (renderer) {
setTimeout(function () {
_this.$setScrollBarDecorators(renderer);
_this.updateScrollBarDecorators();
}, 0);
};
if (this.inlineDiffEditor) {
setupScrollBar(this.activeEditor.renderer);
}
else {
setupScrollBar(this.editorA.renderer);
setupScrollBar(this.editorB.renderer);
}
};
BaseDiffView.prototype.$setScrollBarDecorators = function (renderer) {
if (renderer.$scrollDecorator) {
renderer.$scrollDecorator.destroy();
}
renderer.$scrollDecorator = new ScrollDiffDecorator(renderer.scrollBarV, renderer, this.inlineDiffEditor);
renderer.$scrollDecorator.setSessions(this.sessionA, this.sessionB);
renderer.scrollBarV.setVisible(true);
renderer.scrollBarV.element.style.bottom = renderer.scrollBarH.getHeight() + "px";
};
BaseDiffView.prototype.$resetDecorators = function (renderer) {
if (renderer.$scrollDecorator) {
renderer.$scrollDecorator.destroy();
}
renderer.$scrollDecorator = new Decorator(renderer.scrollBarV, renderer);
};
BaseDiffView.prototype.updateScrollBarDecorators = function () {
var _this = this;
if (this.inlineDiffEditor) {
if (!this.activeEditor) {
return;
}
this.activeEditor.renderer.$scrollDecorator.$zones = [];
}
else {
if (!this.editorA || !this.editorB) {
return;
}
this.editorA.renderer.$scrollDecorator.$zones = [];
this.editorB.renderer.$scrollDecorator.$zones = [];
}
var updateDecorators = function (editor, change) {
if (!editor) {
return;
}
if (typeof editor.renderer.$scrollDecorator.addZone !== "function") {
return;
}
if (change.old.start.row != change.old.end.row) {
editor.renderer.$scrollDecorator.addZone(change.old.start.row, change.old.end.row - 1, "delete");
}
if (change.new.start.row != change.new.end.row) {
editor.renderer.$scrollDecorator.addZone(change.new.start.row, change.new.end.row - 1, "insert");
}
};
if (this.inlineDiffEditor) {
this.chunks && this.chunks.forEach(function (lineChange) {
updateDecorators(_this.activeEditor, lineChange);
});
this.activeEditor.renderer.$scrollDecorator.$updateDecorators(this.activeEditor.renderer.layerConfig);
}
else {
this.chunks && this.chunks.forEach(function (lineChange) {
updateDecorators(_this.editorA, lineChange);
updateDecorators(_this.editorB, lineChange);
});
this.editorA.renderer.$scrollDecorator.$updateDecorators(this.editorA.renderer.layerConfig);
this.editorB.renderer.$scrollDecorator.$updateDecorators(this.editorB.renderer.layerConfig);
}
};
BaseDiffView.prototype.$diffLines = function (val1, val2) {
return this.diffProvider.compute(val1, val2, {
ignoreTrimWhitespace: this.$ignoreTrimWhitespace,
maxComputationTimeMs: this.$maxComputationTimeMs
});
};
BaseDiffView.prototype.setProvider = function (provider) {
this.diffProvider = provider;
};
BaseDiffView.prototype.$addWidget = function (session, w) {
var lineWidget = session.lineWidgets[w.row];
if (lineWidget) {
w.rowsAbove += lineWidget.rowsAbove > w.rowsAbove ? lineWidget.rowsAbove : w.rowsAbove;
w.rowCount += lineWidget.rowCount;
}
session.lineWidgets[w.row] = w;
session.widgetManager.lineWidgets[w.row] = w;
session.$resetRowCache(w.row);
var fold = session.getFoldAt(w.row, 0);
if (fold) {
session.widgetManager.updateOnFold({
data: fold,
action: "add",
}, session);
}
};
BaseDiffView.prototype.$initWidgets = function (editor) {
var session = editor.session;
if (!session.widgetManager) {
session.widgetManager = new LineWidgets(session);
session.widgetManager.attach(editor);
}
editor.session.lineWidgets = [];
editor.session.widgetManager.lineWidgets = [];
editor.session.$resetRowCache(0);
};
BaseDiffView.prototype.$screenRow = function (pos, session) {
var row = session.documentToScreenPosition(pos).row;
var afterEnd = pos.row - session.getLength() + 1;
if (afterEnd > 0) {
row += afterEnd;
}
return row;
};
BaseDiffView.prototype.align = function () { };
BaseDiffView.prototype.onChangeWrapLimit = function (e, session) { };
BaseDiffView.prototype.onSelect = function (e, selection) {
this.searchHighlight(selection);
this.syncSelect(selection);
};
BaseDiffView.prototype.syncSelect = function (selection) {
if (this.$updatingSelection)
return;
var isOld = selection.session === this.sessionA;
var selectionRange = selection.getRange();
var currSelectionRange = isOld ? this.selectionRangeA : this.selectionRangeB;
if (currSelectionRange && selectionRange.isEqual(currSelectionRange))
return;
if (isOld) {
this.selectionRangeA = selectionRange;
}
else {
this.selectionRangeB = selectionRange;
}
this.$updatingSelection = true;
var newRange = this.transformRange(selectionRange, isOld);
if (this.$syncSelections) {
(isOld ? this.editorB : this.editorA).session.selection.setSelectionRange(newRange);
}
this.$updatingSelection = false;
if (isOld) {
this.selectionRangeA = selectionRange;
this.selectionRangeB = newRange;
}
else {
this.selectionRangeA = newRange;
this.selectionRangeB = selectionRange;
}
this.updateSelectionMarker(this.syncSelectionMarkerA, this.sessionA, this.selectionRangeA);
this.updateSelectionMarker(this.syncSelectionMarkerB, this.sessionB, this.selectionRangeB);
};
BaseDiffView.prototype.updateSelectionMarker = function (marker, session, range) {
marker.setRange(range);
session._signal("changeFrontMarker");
};
BaseDiffView.prototype.onChangeFold = function (ev, session) {
var fold = ev.data;
if (this.$syncingFold || !fold || !ev.action)
return;
this.scheduleRealign();
var isOrig = session === this.sessionA;
var other = isOrig ? this.sessionB : this.sessionA;
if (ev.action === "remove") {
if (fold.other) {
fold.other.other = null;
other.removeFold(fold.other);
}
else if (fold.lineWidget) {
other.widgetManager.addLineWidget(fold.lineWidget);
fold.lineWidget = null;
if (other["$editor"]) {
other["$editor"].renderer.updateBackMarkers();
}
}
}
if (ev.action === "add") {
var range = this.transformRange(fold.range, isOrig);
if (range.isEmpty()) {
var row = range.start.row + 1;
if (other.lineWidgets[row]) {
fold.lineWidget = other.lineWidgets[row];
other.widgetManager.removeLineWidget(fold.lineWidget);
if (other["$editor"]) {
other["$editor"].renderer.updateBackMarkers();
}
}
}
else {
this.$syncingFold = true;
fold.other = other.addFold(fold.placeholder, range);
if (fold.other) {
fold.other.other = fold;
}
this.$syncingFold = false;
}
}
};
BaseDiffView.prototype.scheduleRealign = function () {
if (!this.realignPending) {
this.realignPending = true;
this.editorA.renderer.on("beforeRender", this.realign);
this.editorB.renderer.on("beforeRender", this.realign);
}
};
BaseDiffView.prototype.realign = function () {
this.realignPending = true;
this.editorA.renderer.off("beforeRender", this.realign);
this.editorB.renderer.off("beforeRender", this.realign);
this.align();
this.realignPending = false;
};
BaseDiffView.prototype.detach = function () {
if (!this.editorA || !this.editorB)
return;
if (this.savedOptionsA)
this.editorA.setOptions(this.savedOptionsA);
if (this.savedOptionsB)
this.editorB.setOptions(this.savedOptionsB);
this.editorA.renderer.off("beforeRender", this.realign);
this.editorB.renderer.off("beforeRender", this.realign);
this.$detachEventHandlers();
this.$removeLineWidgets(this.sessionA);
this.$removeLineWidgets(this.sessionB);
this.gutterDecoratorA && this.gutterDecoratorA.dispose();
this.gutterDecoratorB && this.gutterDecoratorB.dispose();
this.sessionA.selection.clearSelection();
this.sessionB.selection.clearSelection();
if (this.savedOptionsA && this.savedOptionsA.customScrollbar) {
this.$resetDecorators(this.editorA.renderer);
}
if (this.savedOptionsB && this.savedOptionsB.customScrollbar) {
this.$resetDecorators(this.editorB.renderer);
}
};
BaseDiffView.prototype.$removeLineWidgets = function (session) {
session.lineWidgets = [];
session.widgetManager.lineWidgets = [];
session._signal("changeFold", { data: { start: { row: 0 } } });
};
BaseDiffView.prototype.$detachEventHandlers = function () {
};
BaseDiffView.prototype.destroy = function () {
this.detach();
this.editorA && this.editorA.destroy();
this.editorB && this.editorB.destroy();
this.editorA = this.editorB = null;
};
BaseDiffView.prototype.gotoNext = function (dir) {
var ace = this.activeEditor || this.editorA;
if (this.inlineDiffEditor) {
ace = this.editorA;
}
var sideA = ace == this.editorA;
var row = ace.selection.lead.row;
var i = this.findChunkIndex(this.chunks, row, sideA);
var chunk = this.chunks[i + dir] || this.chunks[i];
var scrollTop = ace.session.getScrollTop();
if (chunk) {
var range = chunk[sideA ? "old" : "new"];
var line = Math.max(range.start.row, range.end.row - 1);
ace.selection.setRange(new Range(line, 0, line, 0));
}
ace.renderer.scrollSelectionIntoView(ace.selection.lead, ace.selection.anchor, 0.5);
ace.renderer.animateScrolling(scrollTop);
};
BaseDiffView.prototype.firstDiffSelected = function () {
return this.currentDiffIndex <= 1;
};
BaseDiffView.prototype.lastDiffSelected = function () {
return this.currentDiffIndex > this.chunks.length - 1;
};
BaseDiffView.prototype.transformRange = function (range, isOriginal) {
return Range.fromPoints(this.transformPosition(range.start, isOriginal), this.transformPosition(range.end, isOriginal));
};
BaseDiffView.prototype.transformPosition = function (pos, isOriginal) {
var chunkIndex = this.findChunkIndex(this.chunks, pos.row, isOriginal);
var chunk = this.chunks[chunkIndex];
var clonePos = this.sessionB.doc.clonePos;
var result = clonePos(pos);
var _a = __read(isOriginal ? ["old", "new"] : ["new", "old"], 2), from = _a[0], to = _a[1];
var deltaChar = 0;
var ignoreIndent = false;
if (chunk) {
if (chunk[from].end.row <= pos.row) {
result.row -= chunk[from].end.row - chunk[to].end.row;
}
else if (chunk.charChanges) {
for (var i = 0; i < chunk.charChanges.length; i++) {
var change = chunk.charChanges[i];
var fromRange = change[from];
var toRange = change[to];
if (fromRange.end.row < pos.row)
continue;
if (fromRange.start.row > pos.row)
break;
if (fromRange.isMultiLine() && fromRange.contains(pos.row, pos.column)) {
result.row = toRange.start.row + pos.row - fromRange.start.row;
var maxRow = toRange.end.row;
if (toRange.end.column === 0)
maxRow--;
if (result.row > maxRow) {
result.row = maxRow;
result.column = (isOriginal ? this.sessionB : this.sessionA).getLine(maxRow).length;
ignoreIndent = true;
}
result.row = Math.min(result.row, maxRow);
}
else {
result.row = toRange.start.row;
if (fromRange.start.column > pos.column)
break;
ignoreIndent = true;
if (!fromRange.isEmpty() && fromRange.contains(pos.row, pos.column)) {
result.column = toRange.start.column;
deltaChar = pos.column - fromRange.start.column;
deltaChar = Math.min(deltaChar, toRange.end.column - toRange.start.column);
}
else {
result = clonePos(toRange.end);
deltaChar = pos.column - fromRange.end.column;
}
}
}
}
else if (chunk[from].start.row <= pos.row) {
result.row += chunk[to].start.row - chunk[from].start.row;
if (result.row >= chunk[to].end.row) {
result.row = chunk[to].end.row - 1;
result.column = (isOriginal ? this.sessionB : this.sessionA).getLine(result.row).length;
}
}
}
if (!ignoreIndent) { //TODO:
var _b = __read(isOriginal ? [this.sessionA, this.sessionB] : [
this.sessionB, this.sessionA
], 2), fromEditSession = _b[0], toEditSession = _b[1];
deltaChar -= this.$getDeltaIndent(fromEditSession, toEditSession, pos.row, result.row);
}
result.column += deltaChar;
return result;
};
BaseDiffView.prototype.$getDeltaIndent = function (fromEditSession, toEditSession, fromLine, toLine) {
var origIndent = this.$getIndent(fromEditSession, fromLine);
var editIndent = this.$getIndent(toEditSession, toLine);
return origIndent - editIndent;
};
BaseDiffView.prototype.$getIndent = function (editSession, line) {
return editSession.getLine(line).match(/^\s*/)[0].length;
};
BaseDiffView.prototype.printDiffs = function () {
this.chunks.forEach(function (diff) {
console.log(diff.toString());
});
};
BaseDiffView.prototype.findChunkIndex = function (chunks, row, isOriginal) {
for (var i = 0; i < chunks.length; i++) {
var ch = chunks[i];
var chunk = isOriginal ? ch.old : ch.new;
if (chunk.end.row < row)
continue;
if (chunk.start.row > row)
break;
}
this.currentDiffIndex = i;
return i - 1;
};
BaseDiffView.prototype.searchHighlight = function (selection) {
if (this.$syncSelections || this.inlineDiffEditor) {
return;
}
var currSession = selection.session;
var otherSession = currSession === this.sessionA
? this.sessionB : this.sessionA;
otherSession.highlight(currSession.$searchHighlight.regExp);
otherSession._signal("changeBackMarker");
};
BaseDiffView.prototype.initSelectionMarkers = function () {
this.syncSelectionMarkerA = new SyncSelectionMarker();
this.syncSelectionMarkerB = new SyncSelectionMarker();
this.sessionA.addDynamicMarker(this.syncSelectionMarkerA, true);
this.sessionB.addDynamicMarker(this.syncSelectionMarkerB, true);
};
BaseDiffView.prototype.clearSelectionMarkers = function () {
this.sessionA.removeMarker(this.syncSelectionMarkerA.id);
this.sessionB.removeMarker(this.syncSelectionMarkerB.id);
};
return BaseDiffView;
}());
config.defineOptions(BaseDiffView.prototype, "DiffView", {
showOtherLineNumbers: {
set: function (value) {
if (this.gutterLayer) {
this.gutterLayer.$renderer = value ? null : emptyGutterRenderer;
this.editorA.renderer.updateFull();
}
},
initialValue: true
},
folding: {
set: function (value) {
this.editorA.setOption("showFoldWidgets", value);
this.editorB.setOption("showFoldWidgets", value);
if (!value) {
var posA = [];
var posB = [];
if (this.chunks) {
this.chunks.forEach(function (x) {
posA.push(x.old.start, x.old.end);
posB.push(x.new.start, x.new.end);
});
}
this.sessionA.unfold(posA);
this.sessionB.unfold(posB);
}
}
},
syncSelections: {
set: function (value) {
},
},
ignoreTrimWhitespace: {
set: function (value) {
this.scheduleOnInput();
},
},
wrap: {
set: function (value) {
this.sessionA.setOption("wrap", value);
this.sessionB.setOption("wrap", value);
}
},
maxDiffs: {
value: 5000,
},
theme: {
set: function (value) {
this.setTheme(value);
},
get: function () {
return this.editorA.getTheme();
}
},
});
var emptyGutterRenderer = {
getText: function name(params) {
return "";
},
getWidth: function () {
return 0;
}
};
exports.BaseDiffView = BaseDiffView;
var DiffChunk = /** @class */ (function () {
function DiffChunk(originalRange, modifiedRange, charChanges) {
this.old = originalRange;
this.new = modifiedRange;
this.charChanges = charChanges && charChanges.map(function (m) { return new DiffChunk(new Range(m.originalStartLineNumber, m.originalStartColumn, m.originalEndLineNumber, m.originalEndColumn), new Range(m.modifiedStartLineNumber, m.modifiedStartColumn, m.modifiedEndLineNumber, m.modifiedEndColumn)); });
}
return DiffChunk;
}());
var DiffHighlight = /** @class */ (function () {
function DiffHighlight(diffView, type) { this.id;
this.diffView = diffView;
this.type = type;
}
DiffHighlight.prototype.update = function (html, markerLayer, session, config) {
var dir, operation, opOperation;
var diffView = this.diffView;
if (this.type === -1) { // original editor
dir = "old";
operation = "delete";
opOperation = "insert";
}
else { //modified editor
dir = "new";
operation = "insert";
opOperation = "delete";
}
var ignoreTrimWhitespace = diffView.$ignoreTrimWhitespace;
var lineChanges = diffView.chunks;
if (session.lineWidgets && !diffView.inlineDiffEditor) {
for (var row = config.firstRow; row <= config.lastRow; row++) {
var lineWidget = session.lineWidgets[row];
if (!lineWidget || lineWidget.hidden)
continue;
var start = session.documentToScreenRow(row, 0);
if (lineWidget.rowsAbove > 0) {
var range = new Range(start - lineWidget.rowsAbove, 0, start - 1, Number.MAX_VALUE);
markerLayer.drawFullLineMarker(html, range, "ace_diff aligned_diff", config);
}
var end = start + lineWidget.rowCount - (lineWidget.rowsAbove || 0);
var range = new Range(start + 1, 0, end, Number.MAX_VALUE);
markerLayer.drawFullLineMarker(html, range, "ace_diff aligned_diff", config);
}
}
lineChanges.forEach(function (lineChange) {
var startRow = lineChange[dir].start.row;
var endRow = lineChange[dir].end.row;
if (endRow < config.firstRow || startRow > config.lastRow)
return;
var range = new Range(startRow, 0, endRow - 1, 1 << 30);
if (startRow !== endRow) {
range = range.toScreenRange(session);
markerLayer.drawFullLineMarker(html, range, "ace_diff " + operation, config);
}
if (lineChange.charChanges) {
for (var i = 0; i < lineChange.charChanges.length; i++) {
var changeRange = lineChange.charChanges[i][dir];
if (changeRange.end.column == 0 && changeRange.end.row > changeRange.start.row && changeRange.end.row == lineChange[dir].end.row) {
changeRange.end.row--;
changeRange.end.column = Number.MAX_VALUE;
}
if (ignoreTrimWhitespace) {
for (var lineNumber = changeRange.start.row; lineNumber <= changeRange.end.row; lineNumber++) {
var startColumn = void 0;
var endColumn = void 0;
var sessionLineStart = session.getLine(lineNumber).match(/^\s*/)[0].length;
var sessionLineEnd = session.getLine(lineNumber).length;
if (lineNumber === changeRange.start.row) {
startColumn = changeRange.start.column;
}
else {
startColumn = sessionLineStart;
}
if (lineNumber === changeRange.end.row) {
endColumn = changeRange.end.column;
}
else {
endColumn = sessionLineEnd;
}
var range_1 = new Range(lineNumber, startColumn, lineNumber, endColumn);
var screenRange = range_1.toScreenRange(session);
if (sessionLineStart === startColumn && sessionLineEnd === endColumn) {
continue;
}
var cssClass = "inline " + operation;
if (range_1.isEmpty() && startColumn !== 0) {
cssClass = "inline " + opOperation + " empty";
}
markerLayer.drawSingleLineMarker(html, screenRange, "ace_diff " + cssClass, config);
}
}
else {
var range_2 = new Range(changeRange.start.row, changeRange.start.column, changeRange.end.row, changeRange.end.column);
var screenRange = range_2.toScreenRange(session);
var cssClass = "inline " + operation;
if (range_2.isEmpty() && changeRange.start.column !== 0) {
cssClass = "inline empty " + opOperation;
}
if (screenRange.isMultiLine()) {
markerLayer.drawTextMarker(html, screenRange, "ace_diff " + cssClass, config);
}
else {
markerLayer.drawSingleLineMarker(html, screenRange, "ace_diff " + cssClass, config);
}
}
}
}
});
};
return DiffHighlight;
}());
var SyncSelectionMarker = /** @class */ (function () {
function SyncSelectionMarker() { this.id;
this.type = "fullLine";
this.clazz = "ace_diff-active-line";
}
SyncSelectionMarker.prototype.update = function (html, markerLayer, session, config) {
};
SyncSelectionMarker.prototype.setRange = function (range) {
var newRange = range.clone();
newRange.end.column++;
this.range = newRange;
};
return SyncSelectionMarker;
}());
exports.DiffChunk = DiffChunk;
exports.DiffHighlight = DiffHighlight;
});
ace.define("ace/ext/diff/inline_diff_view",["require","exports","module","ace/ext/diff/base_diff_view","ace/virtual_renderer","ace/config"], function(require, exports, module){"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var BaseDiffView = require("./base_diff_view").BaseDiffView;
var Renderer = require("../../virtual_renderer").VirtualRenderer;
var config = require("../../config");
var InlineDiffView = /** @class */ (function (_super) {
__extends(InlineDiffView, _super);
function InlineDiffView(diffModel, container) {
var _this = this;
diffModel = diffModel || {};
diffModel.inline = diffModel.inline || "a";
_this = _super.call(this, true, container) || this;
_this.init(diffModel);
return _this;
}
InlineDiffView.prototype.init = function (diffModel) {
this.onSelect = this.onSelect.bind(this);
this.onAfterRender = this.onAfterRender.bind(this);
this.$setupModels(diffModel);
this.onChangeTheme();
config.resetOptions(this);
config["_signal"]("diffView", this);
var padding = this.activeEditor.renderer.$padding;
this.addGutterDecorators();
this.otherEditor.renderer.setPadding(padding);
this.textLayer = this.otherEditor.renderer.$textLayer;
this.markerLayer = this.otherEditor.renderer.$markerBack;
this.gutterLayer = this.otherEditor.renderer.$gutterLayer;
this.cursorLayer = this.otherEditor.renderer.$cursorLayer;
this.otherEditor.renderer.$updateCachedSize = function () {
};
var textLayerElement = this.activeEditor.renderer.$textLayer.element;
textLayerElement.parentNode.insertBefore(this.textLayer.element, textLayerElement);
var markerLayerElement = this.activeEditor.renderer.$markerBack.element;
markerLayerElement.parentNode.insertBefore(this.markerLayer.element, markerLayerElement.nextSibling);
var gutterLayerElement = this.activeEditor.renderer.$gutterLayer.element;
gutterLayerElement.parentNode.insertBefore(this.gutterLayer.element, gutterLayerElement.nextSibling);
gutterLayerElement.style.position = "absolute";
this.gutterLayer.element.style.position = "absolute";
this.gutterLayer.element.style.width = "100%";
this.gutterLayer.element.classList.add("ace_mini-diff_gutter_other");
this.gutterLayer.$updateGutterWidth = function () { };
this.initMouse();
this.initTextInput();
this.initTextLayer();
this.initRenderer();
this.$attachEventHandlers();
this.selectEditor(this.activeEditor);
};
InlineDiffView.prototype.initRenderer = function (restore) {
var _this = this;
if (restore) {
delete this.activeEditor.renderer.$getLongestLine;
}
else {
this.editorA.renderer.$getLongestLine =
this.editorB.renderer.$getLongestLine = function () {
var getLongestLine = Renderer.prototype.$getLongestLine;
return Math.max(getLongestLine.call(_this.editorA.renderer), getLongestLine.call(_this.editorB.renderer));
};
}
};
InlineDiffView.prototype.initTextLayer = function () {
var renderLine = this.textLayer.$renderLine;
var diffView = this;
this.otherEditor.renderer.$textLayer.$renderLine = function (parent, row, foldLIne) {
if (isVisibleRow(diffView.chunks, row)) {
renderLine.call(this, parent, row, foldLIne);
}
};
var side = this.showSideA ? "new" : "old";
function isVisibleRow(chunks, row) {
var min = 0;
var max = chunks.length - 1;
var result = -1;
while (min < max) {
var mid = Math.floor((min + max) / 2);
var chunkStart = chunks[mid][side].start.row;
if (chunkStart < row) {
result = mid;
min = mid + 1;
}
else if (chunkStart > row) {
max = mid - 1;
}
else {
result = mid;
break;
}
}
if (chunks[result + 1] && chunks[result + 1][side].start.row <= row) {
result++;
}
var range = chunks[result] && chunks[result][side];
if (range && range.end.row > row) {
return true;
}
return false;
}
};
InlineDiffView.prototype.initTextInput = function (restore) {
if (restore) {
this.otherEditor.textInput = this.othertextInput;
this.otherEditor.container = this.otherEditorContainer;
}
else {
this.othertextInput = this.otherEditor.textInput;
this.otherEditor.textInput = this.activeEditor.textInput;
this.otherEditorContainer = this.otherEditor.container;
this.otherEditor.container = this.activeEditor.container;
}
};
InlineDiffView.prototype.selectEditor = function (editor) {
if (editor == this.activeEditor) {
this.otherEditor.selection.clearSelection();
this.activeEditor.textInput.setHost(this.activeEditor);
this.activeEditor.setStyle("ace_diff_other", false);
this.cursorLayer.element.remove();
this.activeEditor.renderer.$cursorLayer.element.style.display = "block";
if (this.showSideA) {
this.sessionA.removeMarker(this.syncSelectionMarkerA.id);
this.sessionA.addDynamicMarker(this.syncSelectionMarkerA, true);
}
this.markerLayer.element.classList.add("ace_hidden_marker-layer");
this.activeEditor.renderer.$markerBack.element.classList.remove("ace_hidden_marker-layer");
this.removeBracketHighlight(this.otherEditor);
}
else {
this.activeEditor.selection.clearSelection();
this.activeEditor.textInput.setHost(this.otherEditor);
this.activeEditor.setStyle("ace_diff_other");
this.activeEditor.renderer.$cursorLayer.element.parentNode.appendChild(this.cursorLayer.element);
this.activeEditor.renderer.$cursorLayer.element.style.display = "none";
if (this.activeEditor.$isFocused) {
this.otherEditor.onFocus();
}
if (this.showSideA) {
this.sessionA.removeMarker(this.syncSelectionMarkerA.id);
}
this.markerLayer.element.classList.remove("ace_hidden_marker-layer");
this.activeEditor.renderer.$markerBack.element.classList.add("ace_hidden_marker-layer");
this.removeBracketHighlight(this.activeEditor);
}
};
InlineDiffView.prototype.removeBracketHighlight = function (editor) {
var session = editor.session;
if (session.$bracketHighlight) {
session.$bracketHighlight.markerIds.forEach(function (id) {
session.removeMarker(id);
});
session.$bracketHighlight = null;
}
};
InlineDiffView.prototype.initMouse = function () {
var _this = this;
this.otherEditor.renderer.$loop = this.activeEditor.renderer.$loop;
this.otherEditor.renderer.scroller = {
getBoundingClientRect: function () {
return _this.activeEditor.renderer.scroller.getBoundingClientRect();
},
style: this.activeEditor.renderer.scroller.style,
};
var forwardEvent = function (ev) {
if (!ev.domEvent)
return;
var screenPos = ev.editor.renderer.pixelToScreenCoordinates(ev.clientX, ev.clientY);
var sessionA = _this.activeEditor.session;
var sessionB = _this.otherEditor.session;
var posA = sessionA.screenToDocumentPosition(screenPos.row, screenPos.column, screenPos.offsetX);
var posB = sessionB.screenToDocumentPosition(screenPos.row, screenPos.column, screenPos.offsetX);
var posAx = sessionA.documentToScreenPosition(posA);
var posBx = sessionB.documentToScreenPosition(posB);
if (ev.editor == _this.activeEditor) {
if (posBx.row == screenPos.row && posAx.row != screenPos.row) {
if (ev.type == "mousedown") {
_this.selectEditor(_this.otherEditor);
}
ev.propagationStopped = true;
ev.defaultPrevented = true;
_this.otherEditor.$mouseHandler.onMouseEvent(ev.type, ev.domEvent);
}
else if (ev.type == "mousedown") {
_this.selectEditor(_this.activeEditor);
}
}
};
var events = [
"mousedown",
"click",
"mouseup",
"dblclick",
"tripleclick",
"quadclick",
];
events.forEach(function (event) {
_this.activeEditor.on(event, forwardEvent, true);
_this.activeEditor.on("gutter" + event, forwardEvent, true);
});
var onFocus = function (e) {
_this.activeEditor.onFocus(e);
};
var onBlur = function (e) {
_this.activeEditor.onBlur(e);
};
this.otherEditor.on("focus", onFocus);
this.otherEditor.on("blur", onBlur);
this.onMouseDetach = function () {
events.forEach(function (event) {
_this.activeEditor.off(event, forwardEvent, true);
_this.activeEditor.off("gutter" + event, forwardEvent, true);
});
_this.otherEditor.off("focus", onFocus);
_this.otherEditor.off("blur", onBlur);
};
};
InlineDiffView.prototype.align = function () {
var diffView = this;
this.$initWidgets(diffView.editorA);
this.$initWidgets(diffView.editorB);
diffView.chunks.forEach(function (ch) {
var diff1 = diffView.$screenRow(ch.old.end, diffView.sessionA)
- diffView.$screenRow(ch.old.start, diffView.sessionA);
var diff2 = diffView.$screenRow(ch.new.end, diffView.sessionB)
- diffView.$screenRow(ch.new.start, diffView.sessionB);
diffView.$addWidget(diffView.sessionA, {
rowCount: diff2,
rowsAbove: ch.old.end.row === 0 ? diff2 : 0,
row: ch.old.end.row === 0 ? 0 : ch.old.end.row - 1
});
diffView.$addWidget(diffView.sessionB, {
rowCount: diff1,
rowsAbove: diff1,
row: ch.new.start.row,
});
});
diffView.sessionA["_emit"]("changeFold", { data: { start: { row: 0 } } });
diffView.sessionB["_emit"]("changeFold", { data: { start: { row: 0 } } });
};
InlineDiffView.prototype.onChangeWrapLimit = function () {
this.sessionB.adjustWrapLimit(this.sessionA.$wrapLimit);
this.scheduleRealign();
};
InlineDiffView.prototype.$attachSessionsEventHandlers = function () {
this.$attachSessionEventHandlers(this.editorA, this.markerA);
this.$attachSessionEventHandlers(this.editorB, this.markerB);
this.sessionA.on("changeWrapLimit", this.onChangeWrapLimit);
this.sessionA.on("changeWrapMode", this.onChangeWrapLimit);
};
InlineDiffView.prototype.$attachSessionEventHandlers = function (editor, marker) {
editor.session.on("changeFold", this.onChangeFold);
editor.session.addDynamicMarker(marker);
editor.selection.on("changeCursor", this.onSelect);
editor.selection.on("changeSelection", this.onSelect);
};
InlineDiffView.prototype.$detachSessionsEventHandlers = function () {
this.$detachSessionHandlers(this.editorA, this.markerA);
this.$detachSessionHandlers(this.editorB, this.markerB);
this.otherSession.bgTokenizer.lines.fill(undefined);
this.sessionA.off("changeWrapLimit", this.onChangeWrapLimit);
this.sessionA.off("changeWrapMode", this.onChangeWrapLimit);
};
InlineDiffView.prototype.$detachSessionHandlers = function (editor, marker) {
editor.session.removeMarker(marker.id);
editor.selection.off("changeCursor", this.onSelect);
editor.selection.off("changeSelection", this.onSelect);
editor.session.off("changeFold", this.onChangeFold);
};
InlineDiffView.prototype.$attachEventHandlers = function () {
this.activeEditor.on("input", this.onInput);
this.activeEditor.renderer.on("afterRender", this.onAfterRender);
this.otherSession.on("change", this.onInput);
};
InlineDiffView.prototype.$detachEventHandlers = function () {
this.$detachSessionsEventHandlers();
this.activeEditor.off("input", this.onInput);
this.activeEditor.renderer.off("afterRender", this.onAfterRender);
this.otherSession.off("change", this.onInput);
this.textLayer.element.textContent = "";
this.textLayer.element.remove();
this.gutterLayer.element.textContent = "";
this.gutterLayer.element.remove();
this.markerLayer.element.textContent = "";
this.markerLayer.element.remove();
this.onMouseDetach();
this.selectEditor(this.activeEditor);
this.clearSelectionMarkers();
this.otherEditor.setSession(null);
this.otherEditor.renderer.$loop = null;
this.initTextInput(true);
this.initRenderer(true);
this.otherEditor.destroy();
};
InlineDiffView.prototype.onAfterRender = function (changes, renderer) {
var config = renderer.layerConfig;
var session = this.otherSession;
var cloneRenderer = this.otherEditor.renderer;
session.$scrollTop = renderer.scrollTop;
session.$scrollLeft = renderer.scrollLeft;
[
"characterWidth",
"lineHeight",
"scrollTop",
"scrollLeft",
"scrollMargin",
"$padding",
"$size",
"layerConfig",
"$horizScroll",
"$vScroll",
].forEach(function (prop) {
cloneRenderer[prop] = renderer[prop];
});
cloneRenderer.$computeLayerConfig();
var newConfig = cloneRenderer.layerConfig;
this.gutterLayer.update(newConfig);
newConfig.firstRowScreen = config.firstRowScreen;
cloneRenderer.$cursorLayer.config = newConfig;
cloneRenderer.$cursorLayer.update(newConfig);
if (changes & cloneRenderer.CHANGE_LINES
|| changes & cloneRenderer.CHANGE_FULL
|| changes & cloneRenderer.CHANGE_SCROLL
|| changes & cloneRenderer.CHANGE_TEXT)
this.textLayer.update(newConfig);
this.markerLayer.setMarkers(this.otherSession.getMarkers());
this.markerLayer.update(newConfig);
};
InlineDiffView.prototype.detach = function () {
_super.prototype.detach.call(this);
this.otherEditor && this.otherEditor.destroy();
};
return InlineDiffView;
}(BaseDiffView));
exports.InlineDiffView = InlineDiffView;
});
ace.define("ace/ext/diff/split_diff_view",["require","exports","module","ace/ext/diff/base_diff_view","ace/config"], function(require, exports, module){"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var BaseDiffView = require("./base_diff_view").BaseDiffView;
var config = require("../../config");
var SplitDiffView = /** @class */ (function (_super) {
__extends(SplitDiffView, _super);
function SplitDiffView(diffModel) {
var _this = this;
diffModel = diffModel || {};
_this = _super.call(this) || this;
_this.init(diffModel);
return _this;
}
SplitDiffView.prototype.init = function (diffModel) {
this.onChangeTheme = this.onChangeTheme.bind(this);
this.onMouseWheel = this.onMouseWheel.bind(this);
this.onScroll = this.onScroll.bind(this);
this.$setupModels(diffModel);
this.addGutterDecorators();
this.onChangeTheme();
config.resetOptions(this);
config["_signal"]("diffView", this);
this.$attachEventHandlers();
};
SplitDiffView.prototype.onChangeWrapLimit = function () {
this.scheduleRealign();
};
SplitDiffView.prototype.align = function () {
var diffView = this;
this.$initWidgets(diffView.editorA);
this.$initWidgets(diffView.editorB);
diffView.chunks.forEach(function (ch) {
var diff1 = diffView.$screenRow(ch.old.start, diffView.sessionA);
var diff2 = diffView.$screenRow(ch.new.start, diffView.sessionB);
if (diff1 < diff2) {
diffView.$addWidget(diffView.sessionA, {
rowCount: diff2 - diff1,
rowsAbove: ch.old.start.row === 0 ? diff2 - diff1 : 0,
row: ch.old.start.row === 0 ? 0 : ch.old.start.row - 1
});
}
else if (diff1 > diff2) {
diffView.$addWidget(diffView.sessionB, {
rowCount: diff1 - diff2,
rowsAbove: ch.new.start.row === 0 ? diff1 - diff2 : 0,
row: ch.new.start.row === 0 ? 0 : ch.new.start.row - 1
});
}
var diff1 = diffView.$screenRow(ch.old.end, diffView.sessionA);
var diff2 = diffView.$screenRow(ch.new.end, diffView.sessionB);
if (diff1 < diff2) {
diffView.$addWidget(diffView.sessionA, {
rowCount: diff2 - diff1,
rowsAbove: ch.old.end.row === 0 ? diff2 - diff1 : 0,
row: ch.old.end.row === 0 ? 0 : ch.old.end.row - 1
});
}
else if (diff1 > diff2) {
diffView.$addWidget(diffView.sessionB, {
rowCount: diff1 - diff2,
rowsAbove: ch.new.end.row === 0 ? diff1 - diff2 : 0,
row: ch.new.end.row === 0 ? 0 : ch.new.end.row - 1
});
}
});
diffView.sessionA["_emit"]("changeFold", { data: { start: { row: 0 } } });
diffView.sessionB["_emit"]("changeFold", { data: { start: { row: 0 } } });
};
SplitDiffView.prototype.onScroll = function (e, session) {
this.syncScroll(this.sessionA === session ? this.editorA.renderer : this.editorB.renderer);
};
SplitDiffView.prototype.syncScroll = function (renderer) {
if (this.$syncScroll == false)
return;
var r1 = this.editorA.renderer;
var r2 = this.editorB.renderer;
var isOrig = renderer == r1;
if (r1["$scrollAnimation"] && r2["$scrollAnimation"])
return;
var now = Date.now();
if (this.scrollSetBy != renderer && now - this.scrollSetAt < 500)
return;
var r = isOrig ? r1 : r2;
if (this.scrollSetBy != renderer) {
if (isOrig && this.scrollA == r.session.getScrollTop())
return;
else if (!isOrig && this.scrollB
== r.session.getScrollTop())
return;
}
var rOther = isOrig ? r2 : r1;
var targetPos = r.session.getScrollTop();
this.$syncScroll = false;
if (isOrig) {
this.scrollA = r.session.getScrollTop();
this.scrollB = targetPos;
}
else {
this.scrollA = targetPos;
this.scrollB = r.session.getScrollTop();
}
this.scrollSetBy = renderer;
rOther.session.setScrollTop(targetPos);
this.$syncScroll = true;
this.scrollSetAt = now;
};
SplitDiffView.prototype.onMouseWheel = function (ev) {
if (ev.getAccelKey())
return;
if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {
ev.wheelX = ev.wheelY;
ev.wheelY = 0;
}
var editor = ev.editor;
var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
if (!isScrolable) {
var other = editor == this.editorA ? this.editorB : this.editorA;
if (other.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed))
other.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);
return ev.stop();
}
};
SplitDiffView.prototype.$attachSessionsEventHandlers = function () {
this.$attachSessionEventHandlers(this.editorA, this.markerA);
this.$attachSessionEventHandlers(this.editorB, this.markerB);
};
SplitDiffView.prototype.$attachSessionEventHandlers = function (editor, marker) {
editor.session.on("changeScrollTop", this.onScroll);
editor.session.on("changeFold", this.onChangeFold);
editor.session.addDynamicMarker(marker);
editor.selection.on("changeCursor", this.onSelect);
editor.selection.on("changeSelection", this.onSelect);
editor.session.on("changeWrapLimit", this.onChangeWrapLimit);
editor.session.on("changeWrapMode", this.onChangeWrapLimit);
};
SplitDiffView.prototype.$detachSessionsEventHandlers = function () {
this.$detachSessionHandlers(this.editorA, this.markerA);
this.$detachSessionHandlers(this.editorB, this.markerB);
};
SplitDiffView.prototype.$detachSessionHandlers = function (editor, marker) {
editor.session.off("changeScrollTop", this.onScroll);
editor.session.off("changeFold", this.onChangeFold);
editor.session.removeMarker(marker.id);
editor.selection.off("changeCursor", this.onSelect);
editor.selection.off("changeSelection", this.onSelect);
editor.session.off("changeWrapLimit", this.onChangeWrapLimit);
editor.session.off("changeWrapMode", this.onChangeWrapLimit);
};
SplitDiffView.prototype.$attachEventHandlers = function () {
this.editorA.renderer.on("themeChange", this.onChangeTheme);
this.editorB.renderer.on("themeChange", this.onChangeTheme);
this.editorA.on("mousewheel", this.onMouseWheel);
this.editorB.on("mousewheel", this.onMouseWheel);
this.editorA.on("input", this.onInput);
this.editorB.on("input", this.onInput);
};
SplitDiffView.prototype.$detachEventHandlers = function () {
this.$detachSessionsEventHandlers();
this.clearSelectionMarkers();
this.editorA.renderer.off("themeChange", this.onChangeTheme);
this.editorB.renderer.off("themeChange", this.onChangeTheme);
this.$detachEditorEventHandlers(this.editorA);
this.$detachEditorEventHandlers(this.editorB);
};
SplitDiffView.prototype.$detachEditorEventHandlers = function (editor) {
editor.off("mousewheel", this.onMouseWheel);
editor.off("input", this.onInput);
};
return SplitDiffView;
}(BaseDiffView));
exports.SplitDiffView = SplitDiffView;
});
ace.define("ace/ext/diff/providers/default",["require","exports","module","ace/range","ace/ext/diff/base_diff_view"], function(require, exports, module){'use strict';
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var _a;
var _b, _c, _d, _e, _f;
function equals(one, other, itemEquals) {
if (itemEquals === void 0) { itemEquals = function (a, b) { return a === b; }; }
if (one === other) {
return true;
}
if (!one || !other) {
return false;
}
if (one.length !== other.length) {
return false;
}
for (var i = 0, len = one.length; i < len; i++) {
if (!itemEquals(one[i], other[i])) {
return false;
}
}
return true;
}
function groupAdjacentBy(items, shouldBeGrouped) {
var currentGroup, last, items_1, items_1_1, item, e_1_1;
var e_1, _a;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
_g.trys.push([0, 8, 9, 10]);
items_1 = __values(items), items_1_1 = items_1.next();
_g.label = 1;
case 1:
if (!!items_1_1.done) return [3 /*break*/, 7];
item = items_1_1.value;
if (!(last !== undefined && shouldBeGrouped(last, item))) return [3 /*break*/, 2];
currentGroup.push(item);
return [3 /*break*/, 5];
case 2:
if (!currentGroup) return [3 /*break*/, 4];
return [4 /*yield*/, currentGroup];
case 3:
_g.sent();
_g.label = 4;
case 4:
currentGroup = [item];
_g.label = 5;
case 5:
last = item;
_g.label = 6;
case 6:
items_1_1 = items_1.next();
return [3 /*break*/, 1];
case 7: return [3 /*break*/, 10];
case 8:
e_1_1 = _g.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 10];
case 9:
try {
if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
}
finally { if (e_1) throw e_1.error; }
return [7 /*endfinally*/];
case 10:
if (!currentGroup) return [3 /*break*/, 12];
return [4 /*yield*/, currentGroup];
case 11:
_g.sent();
_g.label = 12;
case 12: return [2 /*return*/];
}
});
}
function forEachAdjacent(arr, f) {
for (var i = 0; i <= arr.length; i++) {
f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);
}
}
function forEachWithNeighbors(arr, f) {
for (var i = 0; i < arr.length; i++) {
f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);
}
}
function pushMany(arr, items) {
var e_2, _a;
try {
for (var items_2 = __values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
var item = items_2_1.value;
arr.push(item);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (items_2_1 && !items_2_1.done && (_a = items_2.return)) _a.call(items_2);
}
finally { if (e_2) throw e_2.error; }
}
}
function compareBy(selector, comparator) {
return function (a, b) { return comparator(selector(a), selector(b)); };
}
var numberComparator = function (a, b) { return a - b; };
function reverseOrder(comparator) {
return function (a, b) { return -comparator(a, b); };
}
var BugIndicatingError = /** @class */ (function (_super) {
__extends(BugIndicatingError, _super);
function BugIndicatingError(message) {
var _this = _super.call(this, message || "An unexpected bug occurred.") || this;
Object.setPrototypeOf(_this, BugIndicatingError.prototype);
return _this;
}
return BugIndicatingError;
}(Error));
function assert(condition, message) {
if (message === void 0) { message = "unexpected state"; }
if (!condition) {
throw new BugIndicatingError("Assertion Failed: ".concat(message));
}
}
function assertFn(condition) {
condition();
}
function checkAdjacentItems(items, predicate) {
var i = 0;
while (i < items.length - 1) {
var a = items[i];
var b = items[i + 1];
if (!predicate(a, b)) {
return false;
}
i++;
}
return true;
}
var OffsetRange = /** @class */ (function () {
function OffsetRange(start, endExclusive) {
this.start = start;
this.endExclusive = endExclusive;
if (start > endExclusive) {
throw new BugIndicatingError("Invalid range: ".concat(this.toString()));
}
}
OffsetRange.fromTo = function (start, endExclusive) {
return new OffsetRange(start, endExclusive);
};
OffsetRange.addRange = function (range, sortedRanges) {
var i = 0;
while (i < sortedRanges.length && sortedRanges[i].endExclusive < range.start) {
i++;
}
var j = i;
while (j < sortedRanges.length && sortedRanges[j].start <= range.endExclusive) {
j++;
}
if (i === j) {
sortedRanges.splice(i, 0, range);
}
else {
var start = Math.min(range.start, sortedRanges[i].start);
var end = Math.max(range.endExclusive, sortedRanges[j - 1].endExclusive);
sortedRanges.splice(i, j - i, new OffsetRange(start, end));
}
};
OffsetRange.tryCreate = function (start, endExclusive) {
if (start > endExclusive) {
return undefined;
}
return new OffsetRange(start, endExclusive);
};
OffsetRange.ofLength = function (length) {
return new OffsetRange(0, length);
};
OffsetRange.ofStartAndLength = function (start, length) {
return new OffsetRange(start, start + length);
};
OffsetRange.emptyAt = function (offset) {
return new OffsetRange(offset, offset);
};
Object.defineProperty(OffsetRange.prototype, "isEmpty", {
get: function () {
return this.start === this.endExclusive;
},
enumerable: false,
configurable: true
});
OffsetRange.prototype.delta = function (offset) {
return new OffsetRange(this.start + offset, this.endExclusive + offset);
};
OffsetRange.prototype.deltaStart = function (offset) {
return new OffsetRange(this.start + offset, this.endExclusive);
};
OffsetRange.prototype.deltaEnd = function (offset) {
return new OffsetRange(this.start, this.endExclusive + offset);
};
Object.defineProperty(OffsetRange.prototype, "length", {
get: function () {
return this.endExclusive - this.start;
},
enumerable: false,
configurable: true
});
OffsetRange.prototype.toString = function () {
return "[".concat(this.start, ", ").concat(this.endExclusive, ")");
};
OffsetRange.prototype.equals = function (other) {
return this.start === other.start && this.endExclusive === other.endExclusive;
};
OffsetRange.prototype.containsRange = function (other) {
return this.start <= other.start && other.endExclusive <= this.endExclusive;
};
OffsetRange.prototype.contains = function (offset) {
return this.start <= offset && offset < this.endExclusive;
};
OffsetRange.prototype.join = function (other) {
return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));
};
OffsetRange.prototype.intersect = function (other) {
var start = Math.max(this.start, other.start);
var end = Math.min(this.endExclusive, other.endExclusive);
if (start <= end) {
return new OffsetRange(start, end);
}
return undefined;
};
OffsetRange.prototype.intersectionLength = function (range) {
var start = Math.max(this.start, range.start);
var end = Math.min(this.endExclusive, range.endExclusive);
return Math.max(0, end - start);
};
OffsetRange.prototype.intersects = function (other) {
var start = Math.max(this.start, other.start);
var end = Math.min(this.endExclusive, other.endExclusive);
return start < end;
};
OffsetRange.prototype.intersectsOrTouches = function (other) {
var start = Math.max(this.start, other.start);
var end = Math.min(this.endExclusive, other.endExclusive);
return start <= end;
};
OffsetRange.prototype.isBefore = function (other) {
return this.endExclusive <= other.start;
};
OffsetRange.prototype.isAfter = function (other) {
return this.start >= other.endExclusive;
};
OffsetRange.prototype.slice = function (arr) {
return arr.slice(this.start, this.endExclusive);
};
OffsetRange.prototype.substring = function (str) {
return str.substring(this.start, this.endExclusive);
};
OffsetRange.prototype.clip = function (value) {
if (this.isEmpty) {
throw new BugIndicatingError("Invalid clipping range: ".concat(this.toString()));
}
return Math.max(this.start, Math.min(this.endExclusive - 1, value));
};
OffsetRange.prototype.clipCyclic = function (value) {
if (this.isEmpty) {
throw new BugIndicatingError("Invalid clipping range: ".concat(this.toString()));
}
if (value < this.start) {
return this.endExclusive - (this.start - value) % this.length;
}
if (value >= this.endExclusive) {
return this.start + (value - this.start) % this.length;
}
return value;
};
OffsetRange.prototype.map = function (f) {
var result = [];
for (var i = this.start; i < this.endExclusive; i++) {
result.push(f(i));
}
return result;
};
OffsetRange.prototype.forEach = function (f) {
for (var i = this.start; i < this.endExclusive; i++) {
f(i);
}
};
return OffsetRange;
}());
var Position = /** @class */ (function () {
function Position(lineNumber, column) {
this.lineNumber = lineNumber;
this.column = column;
}
Position.prototype.equals = function (other) {
return Position.equals(this, other);
};
Position.equals = function (a, b) {
if (!a && !b) {
return true;
}
return !!a && !!b && a.lineNumber === b.lineNumber && a.column === b.column;
};
Position.prototype.isBefore = function (other) {
return Position.isBefore(this, other);
};
Position.isBefore = function (a, b) {
if (a.lineNumber < b.lineNumber) {
return true;
}
if (b.lineNumber < a.lineNumber) {
return false;
}
return a.column < b.column;
};
Position.prototype.isBeforeOrEqual = function (other) {
return Position.isBeforeOrEqual(this, other);
};
Position.isBeforeOrEqual = function (a, b) {
if (a.lineNumber < b.lineNumber) {
return true;
}
if (b.lineNumber < a.lineNumber) {
return false;
}
return a.column <= b.column;
};
return Position;
}());
var Range = /** @class */ (function () {
function Range(startLineNumber, startColumn, endLineNumber, endColumn) {
if (startLineNumber > endLineNumber || startLineNumber === endLineNumber && startColumn > endColumn) {
this.startLineNumber = endLineNumber;
this.startColumn = endColumn;
this.endLineNumber = startLineNumber;
this.endColumn = startColumn;
}
else {
this.startLineNumber = startLineNumber;
this.startColumn = startColumn;
this.endLineNumber = endLineNumber;
this.endColumn = endColumn;
}
}
Range.prototype.isEmpty = function () {
return Range.isEmpty(this);
};
Range.isEmpty = function (range) {
return range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn;
};
Range.prototype.containsPosition = function (position) {
return Range.containsPosition(this, position);
};
Range.containsPosition = function (range, position) {
if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {
return false;
}
if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {
return false;
}
if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {
return false;
}
return true;
};
Range.prototype.containsRange = function (range) {
return Range.containsRange(this, range);
};
Range.containsRange = function (range, otherRange) {
if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {
return false;
}
if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {
return false;
}
if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {
return false;
}
if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {
return false;
}
return true;
};
Range.prototype.strictContainsRange = function (range) {
return Range.strictContainsRange(this, range);
};
Range.strictContainsRange = function (range, otherRange) {
if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {
return false;
}
if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {
return false;
}
if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {
return false;
}
if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {
return false;
}
return true;
};
Range.prototype.plusRange = function (range) {
return Range.plusRange(this, range);
};
Range.plusRange = function (a, b) {
var startLineNumber;
var startColumn;
var endLineNumber;
var endColumn;
if (b.startLineNumber < a.startLineNumber) {
startLineNumber = b.startLineNumber;
startColumn = b.startColumn;
}
else if (b.startLineNumber === a.startLineNumber) {
startLineNumber = b.startLineNumber;
startColumn = Math.min(b.startColumn, a.startColumn);
}
else {
startLineNumber = a.startLineNumber;
startColumn = a.startColumn;
}
if (b.endLineNumber > a.endLineNumber) {
endLineNumber = b.endLineNumber;
endColumn = b.endColumn;
}
else if (b.endLineNumber === a.endLineNumber) {
endLineNumber = b.endLineNumber;
endColumn = Math.max(b.endColumn, a.endColumn);
}
else {
endLineNumber = a.endLineNumber;
endColumn = a.endColumn;
}
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
};
Range.prototype.intersectRanges = function (range) {
return Range.intersectRanges(this, range);
};
Range.intersectRanges = function (a, b) {
var resultStartLineNumber = a.startLineNumber;
var resultStartColumn = a.startColumn;
var resultEndLineNumber = a.endLineNumber;
var resultEndColumn = a.endColumn;
var otherStartLineNumber = b.startLineNumber;
var otherStartColumn = b.startColumn;
var otherEndLineNumber = b.endLineNumber;
var otherEndColumn = b.endColumn;
if (resultStartLineNumber < otherStartLineNumber) {
resultStartLineNumber = otherStartLineNumber;
resultStartColumn = otherStartColumn;
}
else if (resultStartLineNumber === otherStartLineNumber) {
resultStartColumn = Math.max(resultStartColumn, otherStartColumn);
}
if (resultEndLineNumber > otherEndLineNumber) {
resultEndLineNumber = otherEndLineNumber;
resultEndColumn = otherEndColumn;
}
else if (resultEndLineNumber === otherEndLineNumber) {
resultEndColumn = Math.min(resultEndColumn, otherEndColumn);
}
if (resultStartLineNumber > resultEndLineNumber) {
return null;
}
if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {
return null;
}
return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);
};
Range.prototype.equalsRange = function (other) {
return Range.equalsRange(this, other);
};
Range.equalsRange = function (a, b) {
if (!a && !b) {
return true;
}
return !!a && !!b && a.startLineNumber === b.startLineNumber && a.startColumn === b.startColumn && a.endLineNumber === b.endLineNumber && a.endColumn === b.endColumn;
};
Range.prototype.getEndPosition = function () {
return Range.getEndPosition(this);
};
Range.getEndPosition = function (range) {
return new Position(range.endLineNumber, range.endColumn);
};
Range.prototype.getStartPosition = function () {
return Range.getStartPosition(this);
};
Range.getStartPosition = function (range) {
return new Position(range.startLineNumber, range.startColumn);
};
Range.prototype.collapseToStart = function () {
return Range.collapseToStart(this);
};
Range.collapseToStart = function (range) {
return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);
};
Range.prototype.collapseToEnd = function () {
return Range.collapseToEnd(this);
};
Range.collapseToEnd = function (range) {
return new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);
};
Range.fromPositions = function (start, end) {
if (end === void 0) { end = start; }
return new Range(start.lineNumber, start.column, end.lineNumber, end.column);
};
return Range;
}());
function findLastMonotonous(array, predicate) {
var idx = findLastIdxMonotonous(array, predicate);
return idx === -1 ? undefined : array[idx];
}
function findLastIdxMonotonous(array, predicate, startIdx, endIdxEx) {
if (startIdx === void 0) { startIdx = 0; }
if (endIdxEx === void 0) { endIdxEx = array.length; }
var i = startIdx;
var j = endIdxEx;
while (i < j) {
var k = Math.floor((i + j) / 2);
if (predicate(array[k])) {
i = k + 1;
}
else {
j = k;
}
}
return i - 1;
}
function findFirstMonotonous(array, predicate) {
var idx = findFirstIdxMonotonousOrArrLen(array, predicate);
return idx === array.length ? undefined : array[idx];
}
function findFirstIdxMonotonousOrArrLen(array, predicate, startIdx, endIdxEx) {
if (startIdx === void 0) { startIdx = 0; }
if (endIdxEx === void 0) { endIdxEx = array.length; }
var i = startIdx;
var j = endIdxEx;
while (i < j) {
var k = Math.floor((i + j) / 2);
if (predicate(array[k])) {
j = k;
}
else {
i = k + 1;
}
}
return i;
}
var MonotonousArray = /** @class */ (function () {
function MonotonousArray(_array) {
this._array = _array;
this._findLastMonotonousLastIdx = 0;
}
MonotonousArray.prototype.findLastMonotonous = function (predicate) {
var e_3, _a;
if (_b.assertInvariants) {
if (this._prevFindLastPredicate) {
try {
for (var _g = __values(this._array), _h = _g.next(); !_h.done; _h = _g.next()) {
var item = _h.value;
if (this._prevFindLastPredicate(item) && !predicate(item)) {
throw new Error("MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.");
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
}
finally { if (e_3) throw e_3.error; }
}
}
this._prevFindLastPredicate = predicate;
}
var idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);
this._findLastMonotonousLastIdx = idx + 1;
return idx === -1 ? undefined : this._array[idx];
};
return MonotonousArray;
}());
_b = MonotonousArray;
(function () {
_b.assertInvariants = false;
})();
var LineRange = /** @class */ (function () {
function LineRange(startLineNumber, endLineNumberExclusive) {
if (startLineNumber > endLineNumberExclusive) {
throw new BugIndicatingError("startLineNumber ".concat(startLineNumber, " cannot be after endLineNumberExclusive ").concat(endLineNumberExclusive));
}
this.startLineNumber = startLineNumber;
this.endLineNumberExclusive = endLineNumberExclusive;
}
LineRange.fromRangeInclusive = function (range) {
return new LineRange(range.startLineNumber, range.endLineNumber + 1);
};
LineRange.join = function (lineRanges) {
if (lineRanges.length === 0) {
throw new BugIndicatingError("lineRanges cannot be empty");
}
var startLineNumber = lineRanges[0].startLineNumber;
var endLineNumberExclusive = lineRanges[0].endLineNumberExclusive;
for (var i = 1; i < lineRanges.length; i++) {
startLineNumber = Math.min(startLineNumber, lineRanges[i].startLineNumber);
endLineNumberExclusive = Math.max(endLineNumberExclusive, lineRanges[i].endLineNumberExclusive);
}
return new LineRange(startLineNumber, endLineNumberExclusive);
};
LineRange.ofLength = function (startLineNumber, length) {
return new LineRange(startLineNumber, startLineNumber + length);
};
Object.defineProperty(LineRange.prototype, "isEmpty", {
get: function () {
return this.startLineNumber === this.endLineNumberExclusive;
},
enumerable: false,
configurable: true
});
LineRange.prototype.delta = function (offset) {
return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset);
};
Object.defineProperty(LineRange.prototype, "length", {
get: function () {
return this.endLineNumberExclusive - this.startLineNumber;
},
enumerable: false,
configurable: true
});
LineRange.prototype.join = function (other) {
return new LineRange(Math.min(this.startLineNumber, other.startLineNumber), Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive));
};
LineRange.prototype.intersect = function (other) {
var startLineNumber = Math.max(this.startLineNumber, other.startLineNumber);
var endLineNumberExclusive = Math.min(this.endLineNumberExclusive, other.endLineNumberExclusive);
if (startLineNumber <= endLineNumberExclusive) {
return new LineRange(startLineNumber, endLineNumberExclusive);
}
return undefined;
};
LineRange.prototype.overlapOrTouch = function (other) {
return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive;
};
LineRange.prototype.toInclusiveRange = function () {
if (this.isEmpty) {
return null;
}
return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER);
};
LineRange.prototype.toOffsetRange = function () {
return new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);
};
return LineRange;
}());
var LineRangeSet = /** @class */ (function () {
function LineRangeSet(_normalizedRanges) {
if (_normalizedRanges === void 0) { _normalizedRanges = []; }
this._normalizedRanges = _normalizedRanges;
}
Object.defineProperty(LineRangeSet.prototype, "ranges", {
get: function () {
return this._normalizedRanges;
},
enumerable: false,
configurable: true
});
LineRangeSet.prototype.addRange = function (range) {
if (range.length === 0) {
return;
}
var joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, function (r) { return r.endLineNumberExclusive >= range.startLineNumber; });
var joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, function (r) { return r.startLineNumber <= range.endLineNumberExclusive; }) + 1;
if (joinRangeStartIdx === joinRangeEndIdxExclusive) {
this._normalizedRanges.splice(joinRangeStartIdx, 0, range);
}
else if (joinRangeStartIdx === joinRangeEndIdxExclusive - 1) {
var joinRange = this._normalizedRanges[joinRangeStartIdx];
this._normalizedRanges[joinRangeStartIdx] = joinRange.join(range);
}
else {
var joinRange = this._normalizedRanges[joinRangeStartIdx].join(this._normalizedRanges[joinRangeEndIdxExclusive - 1]).join(range);
this._normalizedRanges.splice(joinRangeStartIdx, joinRangeEndIdxExclusive - joinRangeStartIdx, joinRange);
}
};
LineRangeSet.prototype.contains = function (lineNumber) {
var rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, function (r) { return r.startLineNumber <= lineNumber; });
return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > lineNumber;
};
LineRangeSet.prototype.subtractFrom = function (range) {
var joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, function (r) { return r.endLineNumberExclusive >= range.startLineNumber; });
var joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, function (r) { return r.startLineNumber <= range.endLineNumberExclusive; }) + 1;
if (joinRangeStartIdx === joinRangeEndIdxExclusive) {
return new LineRangeSet([range]);
}
var result = [];
var startLineNumber = range.startLineNumber;
for (var i = joinRangeStartIdx; i < joinRangeEndIdxExclusive; i++) {
var r = this._normalizedRanges[i];
if (r.startLineNumber > startLineNumber) {
result.push(new LineRange(startLineNumber, r.startLineNumber));
}
startLineNumber = r.endLineNumberExclusive;
}
if (startLineNumber < range.endLineNumberExclusive) {
result.push(new LineRange(startLineNumber, range.endLineNumberExclusive));
}
return new LineRangeSet(result);
};
LineRangeSet.prototype.getIntersection = function (other) {
var result = [];
var i1 = 0;
var i2 = 0;
while (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {
var r1 = this._normalizedRanges[i1];
var r2 = other._normalizedRanges[i2];
var i = r1.intersect(r2);
if (i && !i.isEmpty) {
result.push(i);
}
if (r1.endLineNumberExclusive < r2.endLineNumberExclusive) {
i1++;
}
else {
i2++;
}
}
return new LineRangeSet(result);
};
LineRangeSet.prototype.getWithDelta = function (value) {
return new LineRangeSet(this._normalizedRanges.map(function (r) { return r.delta(value); }));
};
return LineRangeSet;
}());
var TextLength = /** @class */ (function () {
function TextLength(lineCount, columnCount) {
this.lineCount = lineCount;
this.columnCount = columnCount;
}
TextLength.prototype.toLineRange = function () {
return LineRange.ofLength(1, this.lineCount);
};
TextLength.prototype.addToPosition = function (position) {
if (this.lineCount === 0) {
return new Position(position.lineNumber, position.column + this.columnCount);
}
else {
return new Position(position.lineNumber + this.lineCount, this.columnCount + 1);
}
};
return TextLength;
}());
_c = TextLength;
(function () {
_c.zero = new _c(0, 0);
})();
var LineBasedText = /** @class */ (function () {
function LineBasedText(_getLineContent, _lineCount) {
assert(_lineCount >= 1);
this._getLineContent = _getLineContent;
this._lineCount = _lineCount;
}
LineBasedText.prototype.getValueOfRange = function (range) {
if (range.startLineNumber === range.endLineNumber) {
return this._getLineContent(range.startLineNumber).substring(range.startColumn - 1, range.endColumn - 1);
}
var result = this._getLineContent(range.startLineNumber).substring(range.startColumn - 1);
for (var i = range.startLineNumber + 1; i < range.endLineNumber; i++) {
result += "\n" + this._getLineContent(i);
}
result += "\n" + this._getLineContent(range.endLineNumber).substring(0, range.endColumn - 1);
return result;
};
LineBasedText.prototype.getLineLength = function (lineNumber) {
return this._getLineContent(lineNumber).length;
};
Object.defineProperty(LineBasedText.prototype, "length", {
get: function () {
var lastLine = this._getLineContent(this._lineCount);
return new TextLength(this._lineCount - 1, lastLine.length);
},
enumerable: false,
configurable: true
});
return LineBasedText;
}());
var ArrayText = /** @class */ (function (_super) {
__extends(ArrayText, _super);
function ArrayText(lines) {
return _super.call(this, function (lineNumber) { return lines[lineNumber - 1]; }, lines.length) || this;
}
return ArrayText;
}(LineBasedText));
var LinesDiff = /** @class */ (function () {
function LinesDiff(changes, moves, hitTimeout) {
this.changes = changes;
this.moves = moves;
this.hitTimeout = hitTimeout;
}
return LinesDiff;
}());
var MovedText = /** @class */ (function () {
function MovedText(lineRangeMapping, changes) {
this.lineRangeMapping = lineRangeMapping;
this.changes = changes;
}
return MovedText;
}());
var LineRangeMapping = /** @class */ (function () {
function LineRangeMapping(originalRange, modifiedRange) {
this.original = originalRange;
this.modified = modifiedRange;
}
LineRangeMapping.prototype.join = function (other) {
return new LineRangeMapping(this.original.join(other.original), this.modified.join(other.modified));
};
Object.defineProperty(LineRangeMapping.prototype, "changedLineCount", {
get: function () {
return Math.max(this.original.length, this.modified.length);
},
enumerable: false,
configurable: true
});
LineRangeMapping.prototype.toRangeMapping = function () {
var origInclusiveRange = this.original.toInclusiveRange();
var modInclusiveRange = this.modified.toInclusiveRange();
if (origInclusiveRange && modInclusiveRange) {
return new RangeMapping(origInclusiveRange, modInclusiveRange);
}
else if (this.original.startLineNumber === 1 || this.modified.startLineNumber === 1) {
if (!(this.modified.startLineNumber === 1 && this.original.startLineNumber === 1)) {
throw new BugIndicatingError("not a valid diff");
}
return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));
}
else {
return new RangeMapping(new Range(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), new Range(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER));
}
};
LineRangeMapping.prototype.toRangeMapping2 = function (original, modified) {
if (isValidLineNumber(this.original.endLineNumberExclusive, original) && isValidLineNumber(this.modified.endLineNumberExclusive, modified)) {
return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));
}
if (!this.original.isEmpty && !this.modified.isEmpty) {
return new RangeMapping(Range.fromPositions(new Position(this.original.startLineNumber, 1), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(new Position(this.modified.startLineNumber, 1), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));
}
if (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {
return new RangeMapping(Range.fromPositions(normalizePosition(new Position(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER), original), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(normalizePosition(new Position(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER), modified), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));
}
throw new BugIndicatingError();
};
return LineRangeMapping;
}());
function normalizePosition(position, content) {
if (position.lineNumber < 1) {
return new Position(1, 1);
}
if (position.lineNumber > content.length) {
return new Position(content.length, content[content.length - 1].length + 1);
}
var line = content[position.lineNumber - 1];
if (position.column > line.length + 1) {
return new Position(position.lineNumber, line.length + 1);
}
return position;
}
function isValidLineNumber(lineNumber, lines) {
return lineNumber >= 1 && lineNumber <= lines.length;
}
var DetailedLineRangeMapping = /** @class */ (function (_super) {
__extends(DetailedLineRangeMapping, _super);
function DetailedLineRangeMapping(originalRange, modifiedRange, innerChanges) {
var _this = _super.call(this, originalRange, modifiedRange) || this;
_this.innerChanges = innerChanges;
return _this;
}
DetailedLineRangeMapping.fromRangeMappings = function (rangeMappings) {
var originalRange = LineRange.join(rangeMappings.map(function (r) { return LineRange.fromRangeInclusive(r.originalRange); }));
var modifiedRange = LineRange.join(rangeMappings.map(function (r) { return LineRange.fromRangeInclusive(r.modifiedRange); }));
return new DetailedLineRangeMapping(originalRange, modifiedRange, rangeMappings);
};
DetailedLineRangeMapping.prototype.flip = function () {
var _a;
return new DetailedLineRangeMapping(this.modified, this.original, (_a = this.innerChanges) === null || _a === void 0 ? void 0 : _a.map(function (c) { return c.flip(); }));
};
DetailedLineRangeMapping.prototype.withInnerChangesFromLineRanges = function () {
return new DetailedLineRangeMapping(this.original, this.modified, [this.toRangeMapping()]);
};
return DetailedLineRangeMapping;
}(LineRangeMapping));
var RangeMapping = /** @class */ (function () {
function RangeMapping(originalRange, modifiedRange) {
this.originalRange = originalRange;
this.modifiedRange = modifiedRange;
}
RangeMapping.join = function (rangeMappings) {
if (rangeMappings.length === 0) {
throw new BugIndicatingError("Cannot join an empty list of range mappings");
}
var result = rangeMappings[0];
for (var i = 1; i < rangeMappings.length; i++) {
result = result.join(rangeMappings[i]);
}
return result;
};
RangeMapping.assertSorted = function (rangeMappings) {
for (var i = 1; i < rangeMappings.length; i++) {
var previous = rangeMappings[i - 1];
var current = rangeMappings[i];
if (!(previous.originalRange.getEndPosition().isBeforeOrEqual(current.originalRange.getStartPosition()) && previous.modifiedRange.getEndPosition().isBeforeOrEqual(current.modifiedRange.getStartPosition()))) {
throw new BugIndicatingError("Range mappings must be sorted");
}
}
};
RangeMapping.prototype.flip = function () {
return new RangeMapping(this.modifiedRange, this.originalRange);
};
RangeMapping.prototype.join = function (other) {
return new RangeMapping(this.originalRange.plusRange(other.originalRange), this.modifiedRange.plusRange(other.modifiedRange));
};
return RangeMapping;
}());
function lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines, dontAssertStartLine) {
var e_4, _a;
if (dontAssertStartLine === void 0) { dontAssertStartLine = false; }
var changes = [];
try {
for (var _g = __values(groupAdjacentBy(alignments.map(function (a) { return getLineRangeMapping(a, originalLines, modifiedLines); }), function (a1, a2) { return a1.original.overlapOrTouch(a2.original) || a1.modified.overlapOrTouch(a2.modified); })), _h = _g.next(); !_h.done; _h = _g.next()) {
var g = _h.value;
var first = g[0];
var last = g[g.length - 1];
changes.push(new DetailedLineRangeMapping(first.original.join(last.original), first.modified.join(last.modified), g.map(function (a) { return a.innerChanges[0]; })));
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
}
finally { if (e_4) throw e_4.error; }
}
assertFn(function () {
if (!dontAssertStartLine && changes.length > 0) {
if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) {
return false;
}
if (modifiedLines.length.lineCount - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length.lineCount - changes[changes.length - 1].original.endLineNumberExclusive) {
return false;
}
}
return checkAdjacentItems(changes, function (m1, m2) { return m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive && // There has to be an unchanged line in between (otherwise both diffs should have been joined)
m1.original.endLineNumberExclusive < m2.original.startLineNumber && m1.modified.endLineNumberExclusive < m2.modified.startLineNumber; });
});
return changes;
}
function getLineRangeMapping(rangeMapping, originalLines, modifiedLines) {
var lineStartDelta = 0;
var lineEndDelta = 0;
if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1 && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {
lineEndDelta = -1;
}
if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines.getLineLength(rangeMapping.modifiedRange.startLineNumber) && rangeMapping.originalRange.startColumn - 1 >= originalLines.getLineLength(rangeMapping.originalRange.startLineNumber) && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {
lineStartDelta = 1;
}
var originalLineRange = new LineRange(rangeMapping.originalRange.startLineNumber + lineStartDelta, rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta);
var modifiedLineRange = new LineRange(rangeMapping.modifiedRange.startLineNumber + lineStartDelta, rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta);
return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);
}
var DiffAlgorithmResult = /** @class */ (function () {
function DiffAlgorithmResult(diffs, hitTimeout) {
this.diffs = diffs;
this.hitTimeout = hitTimeout;
}
DiffAlgorithmResult.trivial = function (seq1, seq2) {
return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);
};
DiffAlgorithmResult.trivialTimedOut = function (seq1, seq2) {
return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);
};
return DiffAlgorithmResult;
}());
var SequenceDiff = /** @class */ (function () {
function SequenceDiff(seq1Range, seq2Range) {
this.seq1Range = seq1Range;
this.seq2Range = seq2Range;
}
SequenceDiff.invert = function (sequenceDiffs, doc1Length) {
var result = [];
forEachAdjacent(sequenceDiffs, function (a, b) {
result.push(SequenceDiff.fromOffsetPairs(a ? a.getEndExclusives() : OffsetPair.zero, b ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)));
});
return result;
};
SequenceDiff.fromOffsetPairs = function (start, endExclusive) {
return new SequenceDiff(new OffsetRange(start.offset1, endExclusive.offset1), new OffsetRange(start.offset2, endExclusive.offset2));
};
SequenceDiff.assertSorted = function (sequenceDiffs) {
var e_5, _a;
var last = undefined;
try {
for (var sequenceDiffs_1 = __values(sequenceDiffs), sequenceDiffs_1_1 = sequenceDiffs_1.next(); !sequenceDiffs_1_1.done; sequenceDiffs_1_1 = sequenceDiffs_1.next()) {
var cur = sequenceDiffs_1_1.value;
if (last) {
if (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {
throw new BugIndicatingError("Sequence diffs must be sorted");
}
}
last = cur;
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (sequenceDiffs_1_1 && !sequenceDiffs_1_1.done && (_a = sequenceDiffs_1.return)) _a.call(sequenceDiffs_1);
}
finally { if (e_5) throw e_5.error; }
}
};
SequenceDiff.prototype.swap = function () {
return new SequenceDiff(this.seq2Range, this.seq1Range);
};
SequenceDiff.prototype.join = function (other) {
return new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));
};
SequenceDiff.prototype.delta = function (offset) {
if (offset === 0) {
return this;
}
return new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));
};
SequenceDiff.prototype.deltaStart = function (offset) {
if (offset === 0) {
return this;
}
return new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));
};
SequenceDiff.prototype.deltaEnd = function (offset) {
if (offset === 0) {
return this;
}
return new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));
};
SequenceDiff.prototype.intersect = function (other) {
var i1 = this.seq1Range.intersect(other.seq1Range);
var i2 = this.seq2Range.intersect(other.seq2Range);
if (!i1 || !i2) {
return undefined;
}
return new SequenceDiff(i1, i2);
};
SequenceDiff.prototype.getStarts = function () {
return new OffsetPair(this.seq1Range.start, this.seq2Range.start);
};
SequenceDiff.prototype.getEndExclusives = function () {
return new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);
};
return SequenceDiff;
}());
var OffsetPair = /** @class */ (function () {
function OffsetPair(offset1, offset2) {
this.offset1 = offset1;
this.offset2 = offset2;
}
OffsetPair.prototype.delta = function (offset) {
if (offset === 0) {
return this;
}
return new _d(this.offset1 + offset, this.offset2 + offset);
};
OffsetPair.prototype.equals = function (other) {
return this.offset1 === other.offset1 && this.offset2 === other.offset2;
};
return OffsetPair;
}());
_d = OffsetPair;
(function () {
_d.zero = new _d(0, 0);
})();
(function () {
_d.max = new _d(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
})();
var InfiniteTimeout = /** @class */ (function () {
function InfiniteTimeout() {
}
InfiniteTimeout.prototype.isValid = function () {
return true;
};
return InfiniteTimeout;
}());
_e = InfiniteTimeout;
(function () {
_e.instance = new _e();
})();
var DateTimeout = /** @class */ (function () {
function DateTimeout(timeout) {
this.timeout = timeout;
this.startTime = Date.now();
this.valid = true;
if (timeout <= 0) {
throw new BugIndicatingError("timeout must be positive");
}
}
DateTimeout.prototype.isValid = function () {
var valid = Date.now() - this.startTime < this.timeout;
if (!valid && this.valid) {
this.valid = false;
}
return this.valid;
};
DateTimeout.prototype.disable = function () {
this.timeout = Number.MAX_SAFE_INTEGER;
this.isValid = function () { return true; };
this.valid = true;
};
return DateTimeout;
}());
var Array2D = /** @class */ (function () {
function Array2D(width, height) {
this.width = width;
this.height = height;
this.array = [];
this.array = new Array(width * height);
}
Array2D.prototype.get = function (x, y) {
return this.array[x + y * this.width];
};
Array2D.prototype.set = function (x, y, value) {
this.array[x + y * this.width] = value;
};
return Array2D;
}());
function isSpace(charCode) {
return charCode === 32 || charCode === 9;
}
var LineRangeFragment = /** @class */ (function () {
function LineRangeFragment(range, lines, source) {
this.range = range;
this.lines = lines;
this.source = source;
this.histogram = [];
var counter = 0;
for (var i = range.startLineNumber - 1; i < range.endLineNumberExclusive - 1; i++) {
var line = lines[i];
for (var j = 0; j < line.length; j++) {
counter++;
var chr = line[j];
var key2 = _f.getKey(chr);
this.histogram[key2] = (this.histogram[key2] || 0) + 1;
}
counter++;
var key = _f.getKey("\n");
this.histogram[key] = (this.histogram[key] || 0) + 1;
}
this.totalCount = counter;
}
LineRangeFragment.getKey = function (chr) {
var key = this.chrKeys.get(chr);
if (key === undefined) {
key = this.chrKeys.size;
this.chrKeys.set(chr, key);
}
return key;
};
LineRangeFragment.prototype.computeSimilarity = function (other) {
var _a, _g;
var sumDifferences = 0;
var maxLength = Math.max(this.histogram.length, other.histogram.length);
for (var i = 0; i < maxLength; i++) {
sumDifferences += Math.abs(((_a = this.histogram[i]) !== null && _a !== void 0 ? _a : 0) - ((_g = other.histogram[i]) !== null && _g !== void 0 ? _g : 0));
}
return 1 - sumDifferences / (this.totalCount + other.totalCount);
};
return LineRangeFragment;
}());
_f = LineRangeFragment;
(function () {
_f.chrKeys = /* @__PURE__ */ new Map();
})();
var DynamicProgrammingDiffing = /** @class */ (function () {
function DynamicProgrammingDiffing() {
}
DynamicProgrammingDiffing.prototype.compute = function (sequence1, sequence2, timeout, equalityScore) {
if (timeout === void 0) { timeout = InfiniteTimeout.instance; }
if (sequence1.length === 0 || sequence2.length === 0) {
return DiffAlgorithmResult.trivial(sequence1, sequence2);
}
var lcsLengths = new Array2D(sequence1.length, sequence2.length);
var directions = new Array2D(sequence1.length, sequence2.length);
var lengths = new Array2D(sequence1.length, sequence2.length);
for (var s12 = 0; s12 < sequence1.length; s12++) {
for (var s22 = 0; s22 < sequence2.length; s22++) {
if (!timeout.isValid()) {
return DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);
}
var horizontalLen = s12 === 0 ? 0 : lcsLengths.get(s12 - 1, s22);
var verticalLen = s22 === 0 ? 0 : lcsLengths.get(s12, s22 - 1);
var extendedSeqScore = void 0;
if (sequence1.getElement(s12) === sequence2.getElement(s22)) {
if (s12 === 0 || s22 === 0) {
extendedSeqScore = 0;
}
else {
extendedSeqScore = lcsLengths.get(s12 - 1, s22 - 1);
}
if (s12 > 0 && s22 > 0 && directions.get(s12 - 1, s22 - 1) === 3) {
extendedSeqScore += lengths.get(s12 - 1, s22 - 1);
}
extendedSeqScore += equalityScore ? equalityScore(s12, s22) : 1;
}
else {
extendedSeqScore = -1;
}
var newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);
if (newValue === extendedSeqScore) {
var prevLen = s12 > 0 && s22 > 0 ? lengths.get(s12 - 1, s22 - 1) : 0;
lengths.set(s12, s22, prevLen + 1);
directions.set(s12, s22, 3);
}
else if (newValue === horizontalLen) {
lengths.set(s12, s22, 0);
directions.set(s12, s22, 1);
}
else if (newValue === verticalLen) {
lengths.set(s12, s22, 0);
directions.set(s12, s22, 2);
}
lcsLengths.set(s12, s22, newValue);
}
}
var result = [];
var lastAligningPosS1 = sequence1.length;
var lastAligningPosS2 = sequence2.length;
function reportDecreasingAligningPositions(s12, s22) {
if (s12 + 1 !== lastAligningPosS1 || s22 + 1 !== lastAligningPosS2) {
result.push(new SequenceDiff(new OffsetRange(s12 + 1, lastAligningPosS1), new OffsetRange(s22 + 1, lastAligningPosS2)));
}
lastAligningPosS1 = s12;
lastAligningPosS2 = s22;
}
var s1 = sequence1.length - 1;
var s2 = sequence2.length - 1;
while (s1 >= 0 && s2 >= 0) {
if (directions.get(s1, s2) === 3) {
reportDecreasingAligningPositions(s1, s2);
s1--;
s2--;
}
else {
if (directions.get(s1, s2) === 1) {
s1--;
}
else {
s2--;
}
}
}
reportDecreasingAligningPositions(-1, -1);
result.reverse();
return new DiffAlgorithmResult(result, false);
};
return DynamicProgrammingDiffing;
}());
var MyersDiffAlgorithm = /** @class */ (function () {
function MyersDiffAlgorithm() {
}
MyersDiffAlgorithm.prototype.compute = function (seq1, seq2, timeout) {
if (timeout === void 0) { timeout = InfiniteTimeout.instance; }
if (seq1.length === 0 || seq2.length === 0) {
return DiffAlgorithmResult.trivial(seq1, seq2);
}
var seqX = seq1;
var seqY = seq2;
function getXAfterSnake(x, y) {
while (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {
x++;
y++;
}
return x;
}
var d = 0;
var V = new FastInt32Array();
V.set(0, getXAfterSnake(0, 0));
var paths = new FastArrayNegativeIndices();
paths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));
var k = 0;
loop: while (true) {
d++;
if (!timeout.isValid()) {
return DiffAlgorithmResult.trivialTimedOut(seqX, seqY);
}
var lowerBound = -Math.min(d, seqY.length + d % 2);
var upperBound = Math.min(d, seqX.length + d % 2);
for (k = lowerBound; k <= upperBound; k += 2) {
var maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1);
var maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1;
var x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);
var y = x - k;
if (x > seqX.length || y > seqY.length) {
continue;
}
var newMaxX = getXAfterSnake(x, y);
V.set(k, newMaxX);
var lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);
paths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);
if (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {
break loop;
}
}
}
var path = paths.get(k);
var result = [];
var lastAligningPosS1 = seqX.length;
var lastAligningPosS2 = seqY.length;
while (true) {
var endX = path ? path.x + path.length : 0;
var endY = path ? path.y + path.length : 0;
if (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {
result.push(new SequenceDiff(new OffsetRange(endX, lastAligningPosS1), new OffsetRange(endY, lastAligningPosS2)));
}
if (!path) {
break;
}
lastAligningPosS1 = path.x;
lastAligningPosS2 = path.y;
path = path.prev;
}
result.reverse();
return new DiffAlgorithmResult(result, false);
};
return MyersDiffAlgorithm;
}());
var SnakePath = /** @class */ (function () {
function SnakePath(prev, x, y, length) {
this.prev = prev;
this.x = x;
this.y = y;
this.length = length;
}
return SnakePath;
}());
var FastInt32Array = /** @class */ (function () {
function FastInt32Array() {
this.positiveArr = new Int32Array(10);
this.negativeArr = new Int32Array(10);
}
FastInt32Array.prototype.get = function (idx) {
if (idx < 0) {
idx = -idx - 1;
return this.negativeArr[idx];
}
else {
return this.positiveArr[idx];
}
};
FastInt32Array.prototype.set = function (idx, value) {
if (idx < 0) {
idx = -idx - 1;
if (idx >= this.negativeArr.length) {
var arr = this.negativeArr;
this.negativeArr = new Int32Array(arr.length * 2);
this.negativeArr.set(arr);
}
this.negativeArr[idx] = value;
}
else {
if (idx >= this.positiveArr.length) {
var arr = this.positiveArr;
this.positiveArr = new Int32Array(arr.length * 2);
this.positiveArr.set(arr);
}
this.positiveArr[idx] = value;
}
};
return FastInt32Array;
}());
var FastArrayNegativeIndices = /** @class */ (function () {
function FastArrayNegativeIndices() {
this.positiveArr = [];
this.negativeArr = [];
}
FastArrayNegativeIndices.prototype.get = function (idx) {
if (idx < 0) {
idx = -idx - 1;
return this.negativeArr[idx];
}
else {
return this.positiveArr[idx];
}
};
FastArrayNegativeIndices.prototype.set = function (idx, value) {
if (idx < 0) {
idx = -idx - 1;
this.negativeArr[idx] = value;
}
else {
this.positiveArr[idx] = value;
}
};
return FastArrayNegativeIndices;
}());
var SetMap = /** @class */ (function () {
function SetMap() {
this.map = /* @__PURE__ */ new Map();
}
SetMap.prototype.add = function (key, value) {
var values = this.map.get(key);
if (!values) {
values = /* @__PURE__ */ new Set();
this.map.set(key, values);
}
values.add(value);
};
SetMap.prototype.forEach = function (key, fn) {
var values = this.map.get(key);
if (!values) {
return;
}
values.forEach(fn);
};
SetMap.prototype.get = function (key) {
var values = this.map.get(key);
if (!values) {
return /* @__PURE__ */ new Set();
}
return values;
};
return SetMap;
}());
var LinesSliceCharSequence = /** @class */ (function () {
function LinesSliceCharSequence(lines, range, considerWhitespaceChanges) {
this.lines = lines;
this.range = range;
this.considerWhitespaceChanges = considerWhitespaceChanges;
this.elements = [];
this.firstElementOffsetByLineIdx = [];
this.lineStartOffsets = [];
this.trimmedWsLengthsByLineIdx = [];
this.firstElementOffsetByLineIdx.push(0);
for (var lineNumber = this.range.startLineNumber; lineNumber <= this.range.endLineNumber; lineNumber++) {
var line = lines[lineNumber - 1];
var lineStartOffset = 0;
if (lineNumber === this.range.startLineNumber && this.range.startColumn > 1) {
lineStartOffset = this.range.startColumn - 1;
line = line.substring(lineStartOffset);
}
this.lineStartOffsets.push(lineStartOffset);
var trimmedWsLength = 0;
if (!considerWhitespaceChanges) {
var trimmedStartLine = line.trimStart();
trimmedWsLength = line.length - trimmedStartLine.length;
line = trimmedStartLine.trimEnd();
}
this.trimmedWsLengthsByLineIdx.push(trimmedWsLength);
var lineLength = lineNumber === this.range.endLineNumber ? Math.min(this.range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;
for (var i = 0; i < lineLength; i++) {
this.elements.push(line.charCodeAt(i));
}
if (lineNumber < this.range.endLineNumber) {
this.elements.push("\n".charCodeAt(0));
this.firstElementOffsetByLineIdx.push(this.elements.length);
}
}
}
LinesSliceCharSequence.prototype.toString = function () {
return "Slice: \"".concat(this.text, "\"");
};
Object.defineProperty(LinesSliceCharSequence.prototype, "text", {
get: function () {
return this.getText(new OffsetRange(0, this.length));
},
enumerable: false,
configurable: true
});
LinesSliceCharSequence.prototype.getText = function (range) {
return this.elements.slice(range.start, range.endExclusive).map(function (e) { return String.fromCharCode(e); }).join("");
};
LinesSliceCharSequence.prototype.getElement = function (offset) {
return this.elements[offset];
};
Object.defineProperty(LinesSliceCharSequence.prototype, "length", {
get: function () {
return this.elements.length;
},
enumerable: false,
configurable: true
});
LinesSliceCharSequence.prototype.getBoundaryScore = function (length) {
var prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);
var nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);
if (prevCategory === 7 /* LineBreakCR */ && nextCategory === 8 /* LineBreakLF */) {
return 0;
}
if (prevCategory === 8 /* LineBreakLF */) {
return 150;
}
var score2 = 0;
if (prevCategory !== nextCategory) {
score2 += 10;
if (prevCategory === 0 /* WordLower */ && nextCategory === 1 /* WordUpper */) {
score2 += 1;
}
}
score2 += getCategoryBoundaryScore(prevCategory);
score2 += getCategoryBoundaryScore(nextCategory);
return score2;
};
LinesSliceCharSequence.prototype.translateOffset = function (offset, preference) {
if (preference === void 0) { preference = "right"; }
var i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, function (value) { return value <= offset; });
var lineOffset = offset - this.firstElementOffsetByLineIdx[i];
return new Position(this.range.startLineNumber + i, 1 + this.lineStartOffsets[i] + lineOffset + (lineOffset === 0 && preference === "left" ? 0 : this.trimmedWsLengthsByLineIdx[i]));
};
LinesSliceCharSequence.prototype.translateRange = function (range) {
var pos1 = this.translateOffset(range.start, "right");
var pos2 = this.translateOffset(range.endExclusive, "left");
if (pos2.isBefore(pos1)) {
return Range.fromPositions(pos2, pos2);
}
return Range.fromPositions(pos1, pos2);
};
LinesSliceCharSequence.prototype.findWordContaining = function (offset) {
if (offset < 0 || offset >= this.elements.length) {
return undefined;
}
if (!isWordChar(this.elements[offset])) {
return undefined;
}
var start = offset;
while (start > 0 && isWordChar(this.elements[start - 1])) {
start--;
}
var end = offset;
while (end < this.elements.length && isWordChar(this.elements[end])) {
end++;
}
return new OffsetRange(start, end);
};
LinesSliceCharSequence.prototype.findSubWordContaining = function (offset) {
if (offset < 0 || offset >= this.elements.length) {
return undefined;
}
if (!isWordChar(this.elements[offset])) {
return undefined;
}
var start = offset;
while (start > 0 && isWordChar(this.elements[start - 1]) && !isUpperCase(this.elements[start])) {
start--;
}
var end = offset;
while (end < this.elements.length && isWordChar(this.elements[end]) && !isUpperCase(this.elements[end])) {
end++;
}
return new OffsetRange(start, end);
};
LinesSliceCharSequence.prototype.countLinesIn = function (range) {
return this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;
};
LinesSliceCharSequence.prototype.isStronglyEqual = function (offset1, offset2) {
return this.elements[offset1] === this.elements[offset2];
};
LinesSliceCharSequence.prototype.extendToFullLines = function (range) {
var _a, _g;
var start = (_a = findLastMonotonous(this.firstElementOffsetByLineIdx, function (x) { return x <= range.start; })) !== null && _a !== void 0 ? _a : 0;
var end = (_g = findFirstMonotonous(this.firstElementOffsetByLineIdx, function (x) { return range.endExclusive <= x; })) !== null && _g !== void 0 ? _g : this.elements.length;
return new OffsetRange(start, end);
};
return LinesSliceCharSequence;
}());
function isWordChar(charCode) {
return charCode >= 97 && charCode <= 122 || charCode >= 65 && charCode <= 90 || charCode >= 48 && charCode <= 57;
}
function isUpperCase(charCode) {
return charCode >= 65 && charCode <= 90;
}
var score = (_a = {},
_a[0 /* WordLower */] = 0,
_a[1 /* WordUpper */] = 0,
_a[2 /* WordNumber */] = 0,
_a[3 /* End */] = 10,
_a[4 /* Other */] = 2,
_a[5 /* Separator */] = 30,
_a[6 /* Space */] = 3,
_a[7 /* LineBreakCR */] = 10,
_a[8 /* LineBreakLF */] = 10,
_a);
function getCategoryBoundaryScore(category) {
return score[category];
}
function getCategory(charCode) {
if (charCode === 10) {
return 8 /* LineBreakLF */;
}
else if (charCode === 13) {
return 7 /* LineBreakCR */;
}
else if (isSpace(charCode)) {
return 6 /* Space */;
}
else if (charCode >= 97 && charCode <= 122) {
return 0 /* WordLower */;
}
else if (charCode >= 65 && charCode <= 90) {
return 1 /* WordUpper */;
}
else if (charCode >= 48 && charCode <= 57) {
return 2 /* WordNumber */;
}
else if (charCode === -1) {
return 3 /* End */;
}
else if (charCode === 44 || charCode === 59) {
return 5 /* Separator */;
}
else {
return 4 /* Other */;
}
}
function computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout) {
var _a = computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout), moves = _a.moves, excludedChanges = _a.excludedChanges;
if (!timeout.isValid()) {
return [];
}
var filteredChanges = changes.filter(function (c) { return !excludedChanges.has(c); });
var unchangedMoves = computeUnchangedMoves(filteredChanges, hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout);
pushMany(moves, unchangedMoves);
moves = joinCloseConsecutiveMoves(moves);
moves = moves.filter(function (current) {
var lines = current.original.toOffsetRange().slice(originalLines).map(function (l) { return l.trim(); });
var originalText = lines.join("\n");
return originalText.length >= 15 && countWhere(lines, function (l) { return l.length >= 2; }) >= 2;
});
moves = removeMovesInSameDiff(changes, moves);
return moves;
}
function countWhere(arr, predicate) {
var e_6, _a;
var count = 0;
try {
for (var arr_1 = __values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
var t = arr_1_1.value;
if (predicate(t)) {
count++;
}
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
}
finally { if (e_6) throw e_6.error; }
}
return count;
}
function computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout) {
var e_7, _a, e_8, _g;
var moves = [];
var deletions = changes.filter(function (c) { return c.modified.isEmpty && c.original.length >= 3; }).map(function (d) { return new LineRangeFragment(d.original, originalLines, d); });
var insertions = new Set(changes.filter(function (c) { return c.original.isEmpty && c.modified.length >= 3; }).map(function (d) { return new LineRangeFragment(d.modified, modifiedLines, d); }));
var excludedChanges = /* @__PURE__ */ new Set();
try {
for (var deletions_1 = __values(deletions), deletions_1_1 = deletions_1.next(); !deletions_1_1.done; deletions_1_1 = deletions_1.next()) {
var deletion = deletions_1_1.value;
var highestSimilarity = -1;
var best = void 0;
try {
for (var insertions_1 = (e_8 = void 0, __values(insertions)), insertions_1_1 = insertions_1.next(); !insertions_1_1.done; insertions_1_1 = insertions_1.next()) {
var insertion = insertions_1_1.value;
var similarity = deletion.computeSimilarity(insertion);
if (similarity > highestSimilarity) {
highestSimilarity = similarity;
best = insertion;
}
}
}
catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally {
try {
if (insertions_1_1 && !insertions_1_1.done && (_g = insertions_1.return)) _g.call(insertions_1);
}
finally { if (e_8) throw e_8.error; }
}
if (highestSimilarity > 0.9 && best) {
insertions.delete(best);
moves.push(new LineRangeMapping(deletion.range, best.range));
excludedChanges.add(deletion.source);
excludedChanges.add(best.source);
}
if (!timeout.isValid()) {
return { moves: moves, excludedChanges: excludedChanges };
}
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (deletions_1_1 && !deletions_1_1.done && (_a = deletions_1.return)) _a.call(deletions_1);
}
finally { if (e_7) throw e_7.error; }
}
return { moves: moves, excludedChanges: excludedChanges };
}
function computeUnchangedMoves(changes, hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout) {
var e_9, _a, e_10, _g, e_11, _h, e_12, _j;
var moves = [];
var original3LineHashes = new SetMap();
try {
for (var changes_1 = __values(changes), changes_1_1 = changes_1.next(); !changes_1_1.done; changes_1_1 = changes_1.next()) {
var change = changes_1_1.value;
for (var i = change.original.startLineNumber; i < change.original.endLineNumberExclusive - 2; i++) {
var key = "".concat(hashedOriginalLines[i - 1], ":").concat(hashedOriginalLines[i + 1 - 1], ":").concat(hashedOriginalLines[i + 2 - 1]);
original3LineHashes.add(key, { range: new LineRange(i, i + 3) });
}
}
}
catch (e_9_1) { e_9 = { error: e_9_1 }; }
finally {
try {
if (changes_1_1 && !changes_1_1.done && (_a = changes_1.return)) _a.call(changes_1);
}
finally { if (e_9) throw e_9.error; }
}
var possibleMappings = [];
changes.sort(compareBy(function (c) { return c.modified.startLineNumber; }, numberComparator));
var _loop_1 = function (change) {
var lastMappings = [];
var _loop_3 = function (i) {
var key = "".concat(hashedModifiedLines[i - 1], ":").concat(hashedModifiedLines[i + 1 - 1], ":").concat(hashedModifiedLines[i + 2 - 1]);
var currentModifiedRange = new LineRange(i, i + 3);
var nextMappings = [];
original3LineHashes.forEach(key, function (_a) {
var e_13, _g;
var range = _a.range;
try {
for (var lastMappings_1 = (e_13 = void 0, __values(lastMappings)), lastMappings_1_1 = lastMappings_1.next(); !lastMappings_1_1.done; lastMappings_1_1 = lastMappings_1.next()) {
var lastMapping = lastMappings_1_1.value;
if (lastMapping.originalLineRange.endLineNumberExclusive + 1 === range.endLineNumberExclusive && lastMapping.modifiedLineRange.endLineNumberExclusive + 1 === currentModifiedRange.endLineNumberExclusive) {
lastMapping.originalLineRange = new LineRange(lastMapping.originalLineRange.startLineNumber, range.endLineNumberExclusive);
lastMapping.modifiedLineRange = new LineRange(lastMapping.modifiedLineRange.startLineNumber, currentModifiedRange.endLineNumberExclusive);
nextMappings.push(lastMapping);
return;
}
}
}
catch (e_13_1) { e_13 = { error: e_13_1 }; }
finally {
try {
if (lastMappings_1_1 && !lastMappings_1_1.done && (_g = lastMappings_1.return)) _g.call(lastMappings_1);
}
finally { if (e_13) throw e_13.error; }
}
var mapping = {
modifiedLineRange: currentModifiedRange,
originalLineRange: range
};
possibleMappings.push(mapping);
nextMappings.push(mapping);
});
lastMappings = nextMappings;
};
for (var i = change.modified.startLineNumber; i < change.modified.endLineNumberExclusive - 2; i++) {
_loop_3(i);
}
if (!timeout.isValid()) {
return { value: [] };
}
};
try {
for (var changes_2 = __values(changes), changes_2_1 = changes_2.next(); !changes_2_1.done; changes_2_1 = changes_2.next()) {
var change = changes_2_1.value;
var state_1 = _loop_1(change);
if (typeof state_1 === "object")
return state_1.value;
}
}
catch (e_10_1) { e_10 = { error: e_10_1 }; }
finally {
try {
if (changes_2_1 && !changes_2_1.done && (_g = changes_2.return)) _g.call(changes_2);
}
finally { if (e_10) throw e_10.error; }
}
possibleMappings.sort(reverseOrder(compareBy(function (m) { return m.modifiedLineRange.length; }, numberComparator)));
var modifiedSet = new LineRangeSet();
var originalSet = new LineRangeSet();
try {
for (var possibleMappings_1 = __values(possibleMappings), possibleMappings_1_1 = possibleMappings_1.next(); !possibleMappings_1_1.done; possibleMappings_1_1 = possibleMappings_1.next()) {
var mapping = possibleMappings_1_1.value;
var diffOrigToMod = mapping.modifiedLineRange.startLineNumber - mapping.originalLineRange.startLineNumber;
var modifiedSections = modifiedSet.subtractFrom(mapping.modifiedLineRange);
var originalTranslatedSections = originalSet.subtractFrom(mapping.originalLineRange).getWithDelta(diffOrigToMod);
var modifiedIntersectedSections = modifiedSections.getIntersection(originalTranslatedSections);
try {
for (var _k = (e_12 = void 0, __values(modifiedIntersectedSections.ranges)), _l = _k.next(); !_l.done; _l = _k.next()) {
var s = _l.value;
if (s.length < 3) {
continue;
}
var modifiedLineRange = s;
var originalLineRange = s.delta(-diffOrigToMod);
moves.push(new LineRangeMapping(originalLineRange, modifiedLineRange));
modifiedSet.addRange(modifiedLineRange);
originalSet.addRange(originalLineRange);
}
}
catch (e_12_1) { e_12 = { error: e_12_1 }; }
finally {
try {
if (_l && !_l.done && (_j = _k.return)) _j.call(_k);
}
finally { if (e_12) throw e_12.error; }
}
}
}
catch (e_11_1) { e_11 = { error: e_11_1 }; }
finally {
try {
if (possibleMappings_1_1 && !possibleMappings_1_1.done && (_h = possibleMappings_1.return)) _h.call(possibleMappings_1);
}
finally { if (e_11) throw e_11.error; }
}
moves.sort(compareBy(function (m) { return m.original.startLineNumber; }, numberComparator));
var monotonousChanges = new MonotonousArray(changes);
var _loop_2 = function (i) {
var move = moves[i];
var firstTouchingChangeOrig = monotonousChanges.findLastMonotonous(function (c) { return c.original.startLineNumber <= move.original.startLineNumber; });
var firstTouchingChangeMod = findLastMonotonous(changes, function (c) { return c.modified.startLineNumber <= move.modified.startLineNumber; });
var linesAbove = Math.max(move.original.startLineNumber - firstTouchingChangeOrig.original.startLineNumber, move.modified.startLineNumber - firstTouchingChangeMod.modified.startLineNumber);
var lastTouchingChangeOrig = monotonousChanges.findLastMonotonous(function (c) { return c.original.startLineNumber < move.original.endLineNumberExclusive; });
var lastTouchingChangeMod = findLastMonotonous(changes, function (c) { return c.modified.startLineNumber < move.modified.endLineNumberExclusive; });
var linesBelow = Math.max(lastTouchingChangeOrig.original.endLineNumberExclusive - move.original.endLineNumberExclusive, lastTouchingChangeMod.modified.endLineNumberExclusive - move.modified.endLineNumberExclusive);
var extendToTop = void 0;
for (extendToTop = 0; extendToTop < linesAbove; extendToTop++) {
var origLine = move.original.startLineNumber - extendToTop - 1;
var modLine = move.modified.startLineNumber - extendToTop - 1;
if (origLine > originalLines.length || modLine > modifiedLines.length) {
break;
}
if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) {
break;
}
if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) {
break;
}
}
if (extendToTop > 0) {
originalSet.addRange(new LineRange(move.original.startLineNumber - extendToTop, move.original.startLineNumber));
modifiedSet.addRange(new LineRange(move.modified.startLineNumber - extendToTop, move.modified.startLineNumber));
}
var extendToBottom = void 0;
for (extendToBottom = 0; extendToBottom < linesBelow; extendToBottom++) {
var origLine = move.original.endLineNumberExclusive + extendToBottom;
var modLine = move.modified.endLineNumberExclusive + extendToBottom;
if (origLine > originalLines.length || modLine > modifiedLines.length) {
break;
}
if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) {
break;
}
if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) {
break;
}
}
if (extendToBottom > 0) {
originalSet.addRange(new LineRange(move.original.endLineNumberExclusive, move.original.endLineNumberExclusive + extendToBottom));
modifiedSet.addRange(new LineRange(move.modified.endLineNumberExclusive, move.modified.endLineNumberExclusive + extendToBottom));
}
if (extendToTop > 0 || extendToBottom > 0) {
moves[i] = new LineRangeMapping(new LineRange(move.original.startLineNumber - extendToTop, move.original.endLineNumberExclusive + extendToBottom), new LineRange(move.modified.startLineNumber - extendToTop, move.modified.endLineNumberExclusive + extendToBottom));
}
};
for (var i = 0; i < moves.length; i++) {
_loop_2(i);
}
return moves;
}
function areLinesSimilar(line1, line2, timeout) {
var e_14, _a;
if (line1.trim() === line2.trim()) {
return true;
}
if (line1.length > 300 && line2.length > 300) {
return false;
}
var myersDiffingAlgorithm = new MyersDiffAlgorithm();
var result = myersDiffingAlgorithm.compute(new LinesSliceCharSequence([line1], new Range(1, 1, 1, line1.length), false), new LinesSliceCharSequence([line2], new Range(1, 1, 1, line2.length), false), timeout);
var commonNonSpaceCharCount = 0;
var inverted = SequenceDiff.invert(result.diffs, line1.length);
try {
for (var inverted_1 = __values(inverted), inverted_1_1 = inverted_1.next(); !inverted_1_1.done; inverted_1_1 = inverted_1.next()) {
var seq = inverted_1_1.value;
seq.seq1Range.forEach(function (idx) {
if (!isSpace(line1.charCodeAt(idx))) {
commonNonSpaceCharCount++;
}
});
}
}
catch (e_14_1) { e_14 = { error: e_14_1 }; }
finally {
try {
if (inverted_1_1 && !inverted_1_1.done && (_a = inverted_1.return)) _a.call(inverted_1);
}
finally { if (e_14) throw e_14.error; }
}
function countNonWsChars(str) {
var count = 0;
for (var i = 0; i < line1.length; i++) {
if (!isSpace(str.charCodeAt(i))) {
count++;
}
}
return count;
}
var longerLineLength = countNonWsChars(line1.length > line2.length ? line1 : line2);
var r = commonNonSpaceCharCount / longerLineLength > 0.6 && longerLineLength > 10;
return r;
}
function joinCloseConsecutiveMoves(moves) {
if (moves.length === 0) {
return moves;
}
moves.sort(compareBy(function (m) { return m.original.startLineNumber; }, numberComparator));
var result = [moves[0]];
for (var i = 1; i < moves.length; i++) {
var last = result[result.length - 1];
var current = moves[i];
var originalDist = current.original.startLineNumber - last.original.endLineNumberExclusive;
var modifiedDist = current.modified.startLineNumber - last.modified.endLineNumberExclusive;
var currentMoveAfterLast = originalDist >= 0 && modifiedDist >= 0;
if (currentMoveAfterLast && originalDist + modifiedDist <= 2) {
result[result.length - 1] = last.join(current);
continue;
}
result.push(current);
}
return result;
}
function removeMovesInSameDiff(changes, moves) {
var changesMonotonous = new MonotonousArray(changes);
moves = moves.filter(function (m) {
var diffBeforeEndOfMoveOriginal = changesMonotonous.findLastMonotonous(function (c) { return c.original.startLineNumber < m.original.endLineNumberExclusive; }) || new LineRangeMapping(new LineRange(1, 1), new LineRange(1, 1));
var diffBeforeEndOfMoveModified = findLastMonotonous(changes, function (c) { return c.modified.startLineNumber < m.modified.endLineNumberExclusive; });
var differentDiffs = diffBeforeEndOfMoveOriginal !== diffBeforeEndOfMoveModified;
return differentDiffs;
});
return moves;
}
function optimizeSequenceDiffs(sequence1, sequence2, sequenceDiffs) {
var result = sequenceDiffs;
result = joinSequenceDiffsByShifting(sequence1, sequence2, result);
result = joinSequenceDiffsByShifting(sequence1, sequence2, result);
result = shiftSequenceDiffs(sequence1, sequence2, result);
return result;
}
function joinSequenceDiffsByShifting(sequence1, sequence2, sequenceDiffs) {
if (sequenceDiffs.length === 0) {
return sequenceDiffs;
}
var result = [];
result.push(sequenceDiffs[0]);
for (var i = 1; i < sequenceDiffs.length; i++) {
var prevResult = result[result.length - 1];
var cur = sequenceDiffs[i];
if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {
var length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;
var d = void 0;
for (d = 1; d <= length; d++) {
if (sequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) || sequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {
break;
}
}
d--;
if (d === length) {
result[result.length - 1] = new SequenceDiff(new OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length), new OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length));
continue;
}
cur = cur.delta(-d);
}
result.push(cur);
}
var result2 = [];
for (var i = 0; i < result.length - 1; i++) {
var nextResult = result[i + 1];
var cur = result[i];
if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {
var length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;
var d = void 0;
for (d = 0; d < length; d++) {
if (!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) || !sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)) {
break;
}
}
if (d === length) {
result[i + 1] = new SequenceDiff(new OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive), new OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive));
continue;
}
if (d > 0) {
cur = cur.delta(d);
}
}
result2.push(cur);
}
if (result.length > 0) {
result2.push(result[result.length - 1]);
}
return result2;
}
function shiftSequenceDiffs(sequence1, sequence2, sequenceDiffs) {
if (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {
return sequenceDiffs;
}
for (var i = 0; i < sequenceDiffs.length; i++) {
var prevDiff = i > 0 ? sequenceDiffs[i - 1] : undefined;
var diff = sequenceDiffs[i];
var nextDiff = i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined;
var seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);
var seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);
if (diff.seq1Range.isEmpty) {
sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);
}
else if (diff.seq2Range.isEmpty) {
sequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();
}
}
return sequenceDiffs;
}
function shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange) {
var maxShiftLimit = 100;
var deltaBefore = 1;
while (diff.seq1Range.start - deltaBefore >= seq1ValidRange.start && diff.seq2Range.start - deltaBefore >= seq2ValidRange.start && sequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) {
deltaBefore++;
}
deltaBefore--;
var deltaAfter = 0;
while (diff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive && diff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive && sequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) {
deltaAfter++;
}
if (deltaBefore === 0 && deltaAfter === 0) {
return diff;
}
var bestDelta = 0;
var bestScore = -1;
for (var delta = -deltaBefore; delta <= deltaAfter; delta++) {
var seq2OffsetStart = diff.seq2Range.start + delta;
var seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;
var seq1Offset = diff.seq1Range.start + delta;
var score_1 = sequence1.getBoundaryScore(seq1Offset) + sequence2.getBoundaryScore(seq2OffsetStart) + sequence2.getBoundaryScore(seq2OffsetEndExclusive);
if (score_1 > bestScore) {
bestScore = score_1;
bestDelta = delta;
}
}
return diff.delta(bestDelta);
}
function removeShortMatches(sequence1, sequence2, sequenceDiffs) {
var e_15, _a;
var result = [];
try {
for (var sequenceDiffs_2 = __values(sequenceDiffs), sequenceDiffs_2_1 = sequenceDiffs_2.next(); !sequenceDiffs_2_1.done; sequenceDiffs_2_1 = sequenceDiffs_2.next()) {
var s = sequenceDiffs_2_1.value;
var last = result[result.length - 1];
if (!last) {
result.push(s);
continue;
}
if (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {
result[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));
}
else {
result.push(s);
}
}
}
catch (e_15_1) { e_15 = { error: e_15_1 }; }
finally {
try {
if (sequenceDiffs_2_1 && !sequenceDiffs_2_1.done && (_a = sequenceDiffs_2.return)) _a.call(sequenceDiffs_2);
}
finally { if (e_15) throw e_15.error; }
}
return result;
}
function extendDiffsToEntireWordIfAppropriate(sequence1, sequence2, sequenceDiffs, findParent, force) {
if (force === void 0) { force = false; }
var equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);
var additional = [];
var lastPoint = new OffsetPair(0, 0);
function scanWord(pair, equalMapping) {
if (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {
return;
}
var w1 = findParent(sequence1, pair.offset1);
var w2 = findParent(sequence2, pair.offset2);
if (!w1 || !w2) {
return;
}
var w = new SequenceDiff(w1, w2);
var equalPart = w.intersect(equalMapping);
var equalChars1 = equalPart.seq1Range.length;
var equalChars2 = equalPart.seq2Range.length;
while (equalMappings.length > 0) {
var next = equalMappings[0];
var intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);
if (!intersects) {
break;
}
var v1 = findParent(sequence1, next.seq1Range.start);
var v2 = findParent(sequence2, next.seq2Range.start);
var v = new SequenceDiff(v1, v2);
var equalPart2 = v.intersect(next);
equalChars1 += equalPart2.seq1Range.length;
equalChars2 += equalPart2.seq2Range.length;
w = w.join(v);
if (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {
equalMappings.shift();
}
else {
break;
}
}
if (force && equalChars1 + equalChars2 < w.seq1Range.length + w.seq2Range.length || equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {
additional.push(w);
}
lastPoint = w.getEndExclusives();
}
while (equalMappings.length > 0) {
var next = equalMappings.shift();
if (next.seq1Range.isEmpty) {
continue;
}
scanWord(next.getStarts(), next);
scanWord(next.getEndExclusives().delta(-1), next);
}
var merged = mergeSequenceDiffs(sequenceDiffs, additional);
return merged;
}
function mergeSequenceDiffs(sequenceDiffs1, sequenceDiffs2) {
var result = [];
while (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {
var sd1 = sequenceDiffs1[0];
var sd2 = sequenceDiffs2[0];
var next = void 0;
if (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {
next = sequenceDiffs1.shift();
}
else {
next = sequenceDiffs2.shift();
}
if (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {
result[result.length - 1] = result[result.length - 1].join(next);
}
else {
result.push(next);
}
}
return result;
}
function removeVeryShortMatchingLinesBetweenDiffs(sequence1, _sequence2, sequenceDiffs) {
var diffs = sequenceDiffs;
if (diffs.length === 0) {
return diffs;
}
var counter = 0;
var shouldRepeat;
do {
shouldRepeat = false;
var result = [
diffs[0]
];
var _loop_4 = function (i) {
var shouldJoinDiffs = function (before, after) {
var unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);
var unchangedText = sequence1.getText(unchangedRange);
var unchangedTextWithoutWs = unchangedText.replace(/\s/g, "");
if (unchangedTextWithoutWs.length <= 4 && (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {
return true;
}
return false;
};
var cur = diffs[i];
var lastResult = result[result.length - 1];
var shouldJoin = shouldJoinDiffs(lastResult, cur);
if (shouldJoin) {
shouldRepeat = true;
result[result.length - 1] = result[result.length - 1].join(cur);
}
else {
result.push(cur);
}
};
for (var i = 1; i < diffs.length; i++) {
_loop_4(i);
}
diffs = result;
} while (counter++ < 10 && shouldRepeat);
return diffs;
}
function removeVeryShortMatchingTextBetweenLongDiffs(sequence1, sequence2, sequenceDiffs) {
var diffs = sequenceDiffs;
if (diffs.length === 0) {
return diffs;
}
var counter = 0;
var shouldRepeat;
do {
shouldRepeat = false;
var result = [
diffs[0]
];
var _loop_5 = function (i) {
var shouldJoinDiffs = function (before, after) {
var unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);
var unchangedLineCount = sequence1.countLinesIn(unchangedRange);
if (unchangedLineCount > 5 || unchangedRange.length > 500) {
return false;
}
var unchangedText = sequence1.getText(unchangedRange).trim();
if (unchangedText.length > 20 || unchangedText.split(/\r\n|\r|\n/).length > 1) {
return false;
}
var beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);
var beforeSeq1Length = before.seq1Range.length;
var beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);
var beforeSeq2Length = before.seq2Range.length;
var afterLineCount1 = sequence1.countLinesIn(after.seq1Range);
var afterSeq1Length = after.seq1Range.length;
var afterLineCount2 = sequence2.countLinesIn(after.seq2Range);
var afterSeq2Length = after.seq2Range.length;
var max = 2 * 40 + 50;
function cap(v) {
return Math.min(v, max);
}
if (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5) + Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > Math.pow((Math.pow(max, 1.5)), 1.5) * 1.3) {
return true;
}
return false;
};
var cur = diffs[i];
var lastResult = result[result.length - 1];
var shouldJoin = shouldJoinDiffs(lastResult, cur);
if (shouldJoin) {
shouldRepeat = true;
result[result.length - 1] = result[result.length - 1].join(cur);
}
else {
result.push(cur);
}
};
for (var i = 1; i < diffs.length; i++) {
_loop_5(i);
}
diffs = result;
} while (counter++ < 10 && shouldRepeat);
var newDiffs = [];
forEachWithNeighbors(diffs, function (prev, cur, next) {
var newDiff = cur;
function shouldMarkAsChanged(text) {
return text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;
}
var fullRange1 = sequence1.extendToFullLines(cur.seq1Range);
var prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));
if (shouldMarkAsChanged(prefix)) {
newDiff = newDiff.deltaStart(-prefix.length);
}
var suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));
if (shouldMarkAsChanged(suffix)) {
newDiff = newDiff.deltaEnd(suffix.length);
}
var availableSpace = SequenceDiff.fromOffsetPairs(prev ? prev.getEndExclusives() : OffsetPair.zero, next ? next.getStarts() : OffsetPair.max);
var result = newDiff.intersect(availableSpace);
if (newDiffs.length > 0 && result.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {
newDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(result);
}
else {
newDiffs.push(result);
}
});
return newDiffs;
}
var LineSequence = /** @class */ (function () {
function LineSequence(trimmedHash, lines) {
this.trimmedHash = trimmedHash;
this.lines = lines;
}
LineSequence.prototype.getElement = function (offset) {
return this.trimmedHash[offset];
};
Object.defineProperty(LineSequence.prototype, "length", {
get: function () {
return this.trimmedHash.length;
},
enumerable: false,
configurable: true
});
LineSequence.prototype.getBoundaryScore = function (length) {
var indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);
var indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);
return 1e3 - (indentationBefore + indentationAfter);
};
LineSequence.prototype.getText = function (range) {
return this.lines.slice(range.start, range.endExclusive).join("\n");
};
LineSequence.prototype.isStronglyEqual = function (offset1, offset2) {
return this.lines[offset1] === this.lines[offset2];
};
return LineSequence;
}());
function getIndentation(str) {
var i = 0;
while (i < str.length && (str.charCodeAt(i) === 32 || str.charCodeAt(i) === 9)) {
i++;
}
return i;
}
var DefaultLinesDiffComputer = /** @class */ (function () {
function DefaultLinesDiffComputer() {
this.dynamicProgrammingDiffing = new DynamicProgrammingDiffing();
this.myersDiffingAlgorithm = new MyersDiffAlgorithm();
}
DefaultLinesDiffComputer.prototype.computeDiff = function (originalLines, modifiedLines, options) {
var e_16, _a;
var _this = this;
if (originalLines.length <= 1 && equals(originalLines, modifiedLines, function (a, b) { return a === b; })) {
return new LinesDiff([], [], false);
}
if (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {
return new LinesDiff([
new DetailedLineRangeMapping(new LineRange(1, originalLines.length + 1), new LineRange(1, modifiedLines.length + 1), [
new RangeMapping(new Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1), new Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1))
])
], [], false);
}
var timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);
var considerWhitespaceChanges = !options.ignoreTrimWhitespace;
var perfectHashes = /* @__PURE__ */ new Map();
function getOrCreateHash(text) {
var hash = perfectHashes.get(text);
if (hash === undefined) {
hash = perfectHashes.size;
perfectHashes.set(text, hash);
}
return hash;
}
var originalLinesHashes = originalLines.map(function (l) { return getOrCreateHash(l.trim()); });
var modifiedLinesHashes = modifiedLines.map(function (l) { return getOrCreateHash(l.trim()); });
var sequence1 = new LineSequence(originalLinesHashes, originalLines);
var sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);
var lineAlignmentResult = (function () {
if (sequence1.length + sequence2.length < 1700) {
return _this.dynamicProgrammingDiffing.compute(sequence1, sequence2, timeout, function (offset1, offset2) { return originalLines[offset1] === modifiedLines[offset2] ? modifiedLines[offset2].length === 0 ? 0.1 : 1 + Math.log(1 + modifiedLines[offset2].length) : 0.99; });
}
return _this.myersDiffingAlgorithm.compute(sequence1, sequence2, timeout);
})();
var lineAlignments = lineAlignmentResult.diffs;
var hitTimeout = lineAlignmentResult.hitTimeout;
lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);
lineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);
var alignments = [];
var scanForWhitespaceChanges = function (equalLinesCount) {
var e_17, _a;
if (!considerWhitespaceChanges) {
return;
}
for (var i = 0; i < equalLinesCount; i++) {
var seq1Offset = seq1LastStart + i;
var seq2Offset = seq2LastStart + i;
if (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {
var characterDiffs = _this.refineDiff(originalLines, modifiedLines, new SequenceDiff(new OffsetRange(seq1Offset, seq1Offset + 1), new OffsetRange(seq2Offset, seq2Offset + 1)), timeout, considerWhitespaceChanges, options);
try {
for (var _g = (e_17 = void 0, __values(characterDiffs.mappings)), _h = _g.next(); !_h.done; _h = _g.next()) {
var a = _h.value;
alignments.push(a);
}
}
catch (e_17_1) { e_17 = { error: e_17_1 }; }
finally {
try {
if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
}
finally { if (e_17) throw e_17.error; }
}
if (characterDiffs.hitTimeout) {
hitTimeout = true;
}
}
}
};
var seq1LastStart = 0;
var seq2LastStart = 0;
var _loop_6 = function (diff) {
var e_18, _g;
assertFn(function () { return diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart; });
var equalLinesCount = diff.seq1Range.start - seq1LastStart;
scanForWhitespaceChanges(equalLinesCount);
seq1LastStart = diff.seq1Range.endExclusive;
seq2LastStart = diff.seq2Range.endExclusive;
var characterDiffs = this_1.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options);
if (characterDiffs.hitTimeout) {
hitTimeout = true;
}
try {
for (var _h = (e_18 = void 0, __values(characterDiffs.mappings)), _j = _h.next(); !_j.done; _j = _h.next()) {
var a = _j.value;
alignments.push(a);
}
}
catch (e_18_1) { e_18 = { error: e_18_1 }; }
finally {
try {
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
}
finally { if (e_18) throw e_18.error; }
}
};
var this_1 = this;
try {
for (var lineAlignments_1 = __values(lineAlignments), lineAlignments_1_1 = lineAlignments_1.next(); !lineAlignments_1_1.done; lineAlignments_1_1 = lineAlignments_1.next()) {
var diff = lineAlignments_1_1.value;
_loop_6(diff);
}
}
catch (e_16_1) { e_16 = { error: e_16_1 }; }
finally {
try {
if (lineAlignments_1_1 && !lineAlignments_1_1.done && (_a = lineAlignments_1.return)) _a.call(lineAlignments_1);
}
finally { if (e_16) throw e_16.error; }
}
scanForWhitespaceChanges(originalLines.length - seq1LastStart);
var changes = lineRangeMappingFromRangeMappings(alignments, new ArrayText(originalLines), new ArrayText(modifiedLines));
var moves = [];
if (options.computeMoves) {
moves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges, options);
}
assertFn(function () {
var e_19, _a, e_20, _g;
function validatePosition(pos, lines) {
if (pos.lineNumber < 1 || pos.lineNumber > lines.length) {
return false;
}
var line = lines[pos.lineNumber - 1];
if (pos.column < 1 || pos.column > line.length + 1) {
return false;
}
return true;
}
function validateRange(range, lines) {
if (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) {
return false;
}
if (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) {
return false;
}
return true;
}
try {
for (var changes_3 = __values(changes), changes_3_1 = changes_3.next(); !changes_3_1.done; changes_3_1 = changes_3.next()) {
var c = changes_3_1.value;
if (!c.innerChanges) {
return false;
}
try {
for (var _h = (e_20 = void 0, __values(c.innerChanges)), _j = _h.next(); !_j.done; _j = _h.next()) {
var ic = _j.value;
var valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) && validatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);
if (!valid) {
return false;
}
}
}
catch (e_20_1) { e_20 = { error: e_20_1 }; }
finally {
try {
if (_j && !_j.done && (_g = _h.return)) _g.call(_h);
}
finally { if (e_20) throw e_20.error; }
}
if (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {
return false;
}
}
}
catch (e_19_1) { e_19 = { error: e_19_1 }; }
finally {
try {
if (changes_3_1 && !changes_3_1.done && (_a = changes_3.return)) _a.call(changes_3);
}
finally { if (e_19) throw e_19.error; }
}
return true;
});
return new LinesDiff(changes, moves, hitTimeout);
};
DefaultLinesDiffComputer.prototype.computeMoves = function (changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout, considerWhitespaceChanges, options) {
var _this = this;
var moves = computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout);
var movesWithDiffs = moves.map(function (m) {
var moveChanges = _this.refineDiff(originalLines, modifiedLines, new SequenceDiff(m.original.toOffsetRange(), m.modified.toOffsetRange()), timeout, considerWhitespaceChanges, options);
var mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, new ArrayText(originalLines), new ArrayText(modifiedLines), true);
return new MovedText(m, mappings);
});
return movesWithDiffs;
};
DefaultLinesDiffComputer.prototype.refineDiff = function (originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges, options) {
var lineRangeMapping = toLineRangeMapping(diff);
var rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);
var slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);
var slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);
var diffResult = slice1.length + slice2.length < 500 ? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout) : this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);
var diffs = diffResult.diffs;
diffs = optimizeSequenceDiffs(slice1, slice2, diffs);
diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, function (seq, idx) { return seq.findWordContaining(idx); });
if (options.extendToSubwords) {
diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs, function (seq, idx) { return seq.findSubWordContaining(idx); }, true);
}
diffs = removeShortMatches(slice1, slice2, diffs);
diffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);
var result = diffs.map(function (d) { return new RangeMapping(slice1.translateRange(d.seq1Range), slice2.translateRange(d.seq2Range)); });
return {
mappings: result,
hitTimeout: diffResult.hitTimeout
};
};
return DefaultLinesDiffComputer;
}());
function toLineRangeMapping(sequenceDiff) {
return new LineRangeMapping(new LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1), new LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 1));
}
function computeDiff(originalLines, modifiedLines, options) {
var diffComputer = new DefaultLinesDiffComputer();
var result = diffComputer.computeDiff(originalLines, modifiedLines, options);
return result === null || result === void 0 ? void 0 : result.changes.map(function (changes) {
var originalStartLineNumber;
var originalEndLineNumber;
var modifiedStartLineNumber;
var modifiedEndLineNumber;
var innerChanges = changes.innerChanges;
originalStartLineNumber = changes.original.startLineNumber - 1;
originalEndLineNumber = changes.original.endLineNumberExclusive - 1;
modifiedStartLineNumber = changes.modified.startLineNumber - 1;
modifiedEndLineNumber = changes.modified.endLineNumberExclusive - 1;
return {
origStart: originalStartLineNumber,
origEnd: originalEndLineNumber,
editStart: modifiedStartLineNumber,
editEnd: modifiedEndLineNumber,
charChanges: innerChanges === null || innerChanges === void 0 ? void 0 : innerChanges.map(function (m) { return ({
originalStartLineNumber: m.originalRange.startLineNumber - 1,
originalStartColumn: m.originalRange.startColumn - 1,
originalEndLineNumber: m.originalRange.endLineNumber - 1,
originalEndColumn: m.originalRange.endColumn - 1,
modifiedStartLineNumber: m.modifiedRange.startLineNumber - 1,
modifiedStartColumn: m.modifiedRange.startColumn - 1,
modifiedEndLineNumber: m.modifiedRange.endLineNumber - 1,
modifiedEndColumn: m.modifiedRange.endColumn - 1
}); })
};
});
}
exports.computeDiff = computeDiff;
var AceRange = require("../../../range").Range;
var DiffChunk = require("../base_diff_view").DiffChunk;
var DiffProvider = /** @class */ (function () {
function DiffProvider() {
}
DiffProvider.prototype.compute = function (originalLines, modifiedLines, opts) {
if (!opts)
opts = {};
if (!opts.maxComputationTimeMs)
opts.maxComputationTimeMs = 500;
var chunks = computeDiff(originalLines, modifiedLines, opts) || [];
return chunks.map(function (c) { return new DiffChunk(new AceRange(c.origStart, 0, c.origEnd, 0), new AceRange(c.editStart, 0, c.editEnd, 0), c.charChanges); });
};
return DiffProvider;
}());
exports.DiffProvider = DiffProvider;
});
ace.define("ace/ext/diff",["require","exports","module","ace/ext/diff/inline_diff_view","ace/ext/diff/split_diff_view","ace/ext/diff/providers/default"], function(require, exports, module){/**
* ## Diff extension
*
* Provides side-by-side and inline diff view capabilities for comparing code differences between two versions.
* Supports visual highlighting of additions, deletions, and modifications with customizable diff providers
* and rendering options. Includes features for synchronized scrolling, line number alignment, and
* various diff computation algorithms.
*
* **Components:**
* - `InlineDiffView`: Single editor view showing changes inline with markers
* - `SplitDiffView`: Side-by-side comparison view with two synchronized editors
* - `DiffProvider`: Configurable algorithms for computing differences
*
* **Usage:**
* ```javascript
* const diffView = createDiffView({
* valueA: originalContent,
* valueB: modifiedContent,
* inline: false // or 'a'/'b' for inline view
* });
* ```
*
* @module
*/
var InlineDiffView = require("./diff/inline_diff_view").InlineDiffView;
var SplitDiffView = require("./diff/split_diff_view").SplitDiffView;
var DiffProvider = require("./diff/providers/default").DiffProvider;
function createDiffView(diffModel, options) {
diffModel = diffModel || {};
diffModel.diffProvider = diffModel.diffProvider || new DiffProvider(); //use default diff provider;
var diffView;
if (diffModel.inline) {
diffView = new InlineDiffView(diffModel);
}
else {
diffView = new SplitDiffView(diffModel);
}
if (options) {
diffView.setOptions(options);
}
return diffView;
}
exports.InlineDiffView = InlineDiffView;
exports.SplitDiffView = SplitDiffView;
exports.DiffProvider = DiffProvider;
exports.createDiffView = createDiffView;
}); (function() {
ace.require(["ace/ext/diff"], function(m) {
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = m;
}
});
})();