@theia/scm 1.64.0-next.28 → 1.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/decorations/scm-decorations-service.d.ts.map +1 -1
- package/lib/browser/decorations/scm-decorations-service.js +19 -1
- package/lib/browser/decorations/scm-decorations-service.js.map +1 -1
- package/lib/browser/merge-editor/merge-editor-contribution.d.ts +34 -0
- package/lib/browser/merge-editor/merge-editor-contribution.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor-contribution.js +335 -0
- package/lib/browser/merge-editor/merge-editor-contribution.js.map +1 -0
- package/lib/browser/merge-editor/merge-editor-dev-contribution.d.ts +31 -0
- package/lib/browser/merge-editor/merge-editor-dev-contribution.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor-dev-contribution.js +151 -0
- package/lib/browser/merge-editor/merge-editor-dev-contribution.js.map +1 -0
- package/lib/browser/merge-editor/merge-editor-module.d.ts +24 -0
- package/lib/browser/merge-editor/merge-editor-module.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor-module.js +109 -0
- package/lib/browser/merge-editor/merge-editor-module.js.map +1 -0
- package/lib/browser/merge-editor/merge-editor.d.ts +122 -0
- package/lib/browser/merge-editor/merge-editor.d.ts.map +1 -0
- package/lib/browser/merge-editor/merge-editor.js +560 -0
- package/lib/browser/merge-editor/merge-editor.js.map +1 -0
- package/lib/browser/merge-editor/model/line-range.d.ts +37 -0
- package/lib/browser/merge-editor/model/line-range.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/line-range.js +111 -0
- package/lib/browser/merge-editor/model/line-range.js.map +1 -0
- package/lib/browser/merge-editor/model/live-diff.d.ts +26 -0
- package/lib/browser/merge-editor/model/live-diff.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/live-diff.js +85 -0
- package/lib/browser/merge-editor/model/live-diff.js.map +1 -0
- package/lib/browser/merge-editor/model/merge-editor-model.d.ts +116 -0
- package/lib/browser/merge-editor/model/merge-editor-model.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/merge-editor-model.js +507 -0
- package/lib/browser/merge-editor/model/merge-editor-model.js.map +1 -0
- package/lib/browser/merge-editor/model/merge-range.d.ts +50 -0
- package/lib/browser/merge-editor/model/merge-range.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/merge-range.js +215 -0
- package/lib/browser/merge-editor/model/merge-range.js.map +1 -0
- package/lib/browser/merge-editor/model/range-editing.d.ts +21 -0
- package/lib/browser/merge-editor/model/range-editing.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/range-editing.js +68 -0
- package/lib/browser/merge-editor/model/range-editing.js.map +1 -0
- package/lib/browser/merge-editor/model/range-mapping.d.ts +106 -0
- package/lib/browser/merge-editor/model/range-mapping.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/range-mapping.js +252 -0
- package/lib/browser/merge-editor/model/range-mapping.js.map +1 -0
- package/lib/browser/merge-editor/model/range-mapping.spec.d.ts +2 -0
- package/lib/browser/merge-editor/model/range-mapping.spec.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/range-mapping.spec.js +48 -0
- package/lib/browser/merge-editor/model/range-mapping.spec.js.map +1 -0
- package/lib/browser/merge-editor/model/range-utils.d.ts +25 -0
- package/lib/browser/merge-editor/model/range-utils.d.ts.map +1 -0
- package/lib/browser/merge-editor/model/range-utils.js +118 -0
- package/lib/browser/merge-editor/model/range-utils.js.map +1 -0
- package/lib/browser/merge-editor/view/diff-spacers.d.ts +50 -0
- package/lib/browser/merge-editor/view/diff-spacers.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/diff-spacers.js +133 -0
- package/lib/browser/merge-editor/view/diff-spacers.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/index.d.ts +6 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/index.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/index.js +24 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/index.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.d.ts +12 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.js +65 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.d.ts +30 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.js +102 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.d.ts +49 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.js +214 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.d.ts +16 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.js +107 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.d.ts +27 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.js +135 -0
- package/lib/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts +20 -0
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js +218 -0
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-view-zones.d.ts +57 -0
- package/lib/browser/merge-editor/view/merge-editor-view-zones.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-editor-view-zones.js +218 -0
- package/lib/browser/merge-editor/view/merge-editor-view-zones.js.map +1 -0
- package/lib/browser/merge-editor/view/merge-range-actions.d.ts +23 -0
- package/lib/browser/merge-editor/view/merge-range-actions.d.ts.map +1 -0
- package/lib/browser/merge-editor/view/merge-range-actions.js +142 -0
- package/lib/browser/merge-editor/view/merge-range-actions.js.map +1 -0
- package/lib/browser/scm-colors.d.ts +2 -0
- package/lib/browser/scm-colors.d.ts.map +1 -1
- package/lib/browser/scm-colors.js +2 -0
- package/lib/browser/scm-colors.js.map +1 -1
- package/lib/browser/scm-frontend-module.d.ts.map +1 -1
- package/lib/browser/scm-frontend-module.js +2 -0
- package/lib/browser/scm-frontend-module.js.map +1 -1
- package/package.json +7 -7
- package/src/browser/decorations/scm-decorations-service.ts +18 -1
- package/src/browser/merge-editor/merge-editor-contribution.ts +346 -0
- package/src/browser/merge-editor/merge-editor-dev-contribution.ts +154 -0
- package/src/browser/merge-editor/merge-editor-module.ts +134 -0
- package/src/browser/merge-editor/merge-editor.ts +643 -0
- package/src/browser/merge-editor/model/line-range.ts +128 -0
- package/src/browser/merge-editor/model/live-diff.ts +111 -0
- package/src/browser/merge-editor/model/merge-editor-model.ts +623 -0
- package/src/browser/merge-editor/model/merge-range.ts +268 -0
- package/src/browser/merge-editor/model/range-editing.ts +81 -0
- package/src/browser/merge-editor/model/range-mapping.spec.ts +52 -0
- package/src/browser/merge-editor/model/range-mapping.ts +396 -0
- package/src/browser/merge-editor/model/range-utils.ts +115 -0
- package/src/browser/merge-editor/view/diff-spacers.ts +160 -0
- package/src/browser/merge-editor/view/merge-editor-panes/index.ts +21 -0
- package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-base-pane.ts +71 -0
- package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-pane-header.tsx +106 -0
- package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-pane.ts +246 -0
- package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-result-pane.ts +115 -0
- package/src/browser/merge-editor/view/merge-editor-panes/merge-editor-side-pane.ts +139 -0
- package/src/browser/merge-editor/view/merge-editor-scroll-sync.ts +241 -0
- package/src/browser/merge-editor/view/merge-editor-view-zones.ts +264 -0
- package/src/browser/merge-editor/view/merge-range-actions.ts +159 -0
- package/src/browser/scm-colors.ts +2 -0
- package/src/browser/scm-frontend-module.ts +4 -0
- package/src/browser/style/merge-editor.css +221 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2025 1C-Soft LLC and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
/*---------------------------------------------------------------------------------------------
|
|
17
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
+
*--------------------------------------------------------------------------------------------*/
|
|
20
|
+
// copied and modified from https://github.com/microsoft/vscode/blob/1.96.3/src/vs/workbench/contrib/mergeEditor/browser/model/lineRange.ts
|
|
21
|
+
|
|
22
|
+
import { Range, uinteger } from '@theia/core/shared/vscode-languageserver-protocol';
|
|
23
|
+
import { TextEditorDocument } from '@theia/editor/lib/browser/editor';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Represents a range of whole lines of text. Line numbers are zero-based.
|
|
27
|
+
*/
|
|
28
|
+
export class LineRange {
|
|
29
|
+
static compareByStart(a: LineRange, b: LineRange): number {
|
|
30
|
+
return a.startLineNumber - b.startLineNumber;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static fromLineNumbers(startLineNumber: number, endExclusiveLineNumber: number): LineRange {
|
|
34
|
+
return new LineRange(startLineNumber, endExclusiveLineNumber - startLineNumber);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
constructor(
|
|
38
|
+
/** A zero-based number of the start line. The range starts exactly at the beginning of this line. */
|
|
39
|
+
readonly startLineNumber: number,
|
|
40
|
+
readonly lineCount: number
|
|
41
|
+
) {
|
|
42
|
+
if (startLineNumber < 0 || lineCount < 0) {
|
|
43
|
+
throw new Error('Invalid line range: ' + this.toString());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
join(other: LineRange): LineRange {
|
|
48
|
+
return LineRange.fromLineNumbers(Math.min(this.startLineNumber, other.startLineNumber), Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** A zero-based number of the end line. The range ends just before the beginning of this line. */
|
|
52
|
+
get endLineNumberExclusive(): number {
|
|
53
|
+
return this.startLineNumber + this.lineCount;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get isEmpty(): boolean {
|
|
57
|
+
return this.lineCount === 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Returns `false` if there is at least one line between `this` and `other`.
|
|
62
|
+
*/
|
|
63
|
+
touches(other: LineRange): boolean {
|
|
64
|
+
return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
isAfter(other: LineRange): boolean {
|
|
68
|
+
return this.startLineNumber >= other.endLineNumberExclusive;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
isBefore(other: LineRange): boolean {
|
|
72
|
+
return other.startLineNumber >= this.endLineNumberExclusive;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
delta(lineDelta: number): LineRange {
|
|
76
|
+
return new LineRange(this.startLineNumber + lineDelta, this.lineCount);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
deltaStart(lineDelta: number): LineRange {
|
|
80
|
+
return new LineRange(this.startLineNumber + lineDelta, this.lineCount - lineDelta);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
deltaEnd(lineDelta: number): LineRange {
|
|
84
|
+
return new LineRange(this.startLineNumber, this.lineCount + lineDelta);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
toString(): string {
|
|
88
|
+
return `[${this.startLineNumber},${this.endLineNumberExclusive})`;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
equals(other: LineRange): boolean {
|
|
92
|
+
return this.startLineNumber === other.startLineNumber && this.lineCount === other.lineCount;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
contains(other: LineRange): boolean {
|
|
96
|
+
return this.startLineNumber <= other.startLineNumber && other.endLineNumberExclusive <= this.endLineNumberExclusive;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
containsLine(lineNumber: number): boolean {
|
|
100
|
+
return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
getLines(document: TextEditorDocument): string[] {
|
|
104
|
+
const result = new Array(this.lineCount);
|
|
105
|
+
for (let i = 0; i < this.lineCount; i++) {
|
|
106
|
+
result[i] = document.getLineContent(this.startLineNumber + i + 1); // note that getLineContent expects a one-based line number
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
toRange(): Range {
|
|
112
|
+
return Range.create(this.startLineNumber, 0, this.endLineNumberExclusive, 0);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
toInclusiveRange(): Range | undefined {
|
|
116
|
+
if (this.isEmpty) {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
return Range.create(this.startLineNumber, 0, this.endLineNumberExclusive - 1, uinteger.MAX_VALUE);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
toInclusiveRangeOrEmpty(): Range {
|
|
123
|
+
if (this.isEmpty) {
|
|
124
|
+
return Range.create(this.startLineNumber, 0, this.startLineNumber, 0);
|
|
125
|
+
}
|
|
126
|
+
return Range.create(this.startLineNumber, 0, this.endLineNumberExclusive - 1, uinteger.MAX_VALUE);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2025 1C-Soft LLC and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
/*---------------------------------------------------------------------------------------------
|
|
17
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
18
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
19
|
+
*--------------------------------------------------------------------------------------------*/
|
|
20
|
+
// copied and modified from https://github.com/microsoft/vscode/blob/1.96.3/src/vs/workbench/contrib/mergeEditor/browser/model/textModelDiffs.ts
|
|
21
|
+
|
|
22
|
+
import { Disposable, DisposableCollection, URI } from '@theia/core';
|
|
23
|
+
import { Autorun, Observable, ObservableSignal, SettableObservable } from '@theia/core/lib/common/observable';
|
|
24
|
+
import { DiffComputer, LineRange as DiffLineRange } from '@theia/core/lib/common/diff';
|
|
25
|
+
import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model';
|
|
26
|
+
import { DetailedLineRangeMapping, RangeMapping } from './range-mapping';
|
|
27
|
+
import { LineRange } from './line-range';
|
|
28
|
+
|
|
29
|
+
export class LiveDiff implements Disposable {
|
|
30
|
+
|
|
31
|
+
protected recomputeCount = 0;
|
|
32
|
+
protected readonly stateObservable = SettableObservable.create(LiveDiffState.Initializing);
|
|
33
|
+
protected readonly changesObservable = SettableObservable.create<readonly DetailedLineRangeMapping[]>([]);
|
|
34
|
+
protected readonly toDispose = new DisposableCollection();
|
|
35
|
+
|
|
36
|
+
constructor(
|
|
37
|
+
protected readonly originalDocument: MonacoEditorModel,
|
|
38
|
+
protected readonly modifiedDocument: MonacoEditorModel,
|
|
39
|
+
protected readonly diffComputer: DiffComputer
|
|
40
|
+
) {
|
|
41
|
+
const recomputeSignal = ObservableSignal.create();
|
|
42
|
+
|
|
43
|
+
this.toDispose.push(Autorun.create(() => {
|
|
44
|
+
recomputeSignal.get();
|
|
45
|
+
this.recompute();
|
|
46
|
+
}));
|
|
47
|
+
|
|
48
|
+
this.toDispose.push(originalDocument.onDidChangeContent(
|
|
49
|
+
() => recomputeSignal.trigger()
|
|
50
|
+
));
|
|
51
|
+
this.toDispose.push(modifiedDocument.onDidChangeContent(
|
|
52
|
+
() => recomputeSignal.trigger()
|
|
53
|
+
));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
dispose(): void {
|
|
57
|
+
this.toDispose.dispose();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
get state(): LiveDiffState {
|
|
61
|
+
return this.stateObservable.get();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get changes(): readonly DetailedLineRangeMapping[] {
|
|
65
|
+
return this.changesObservable.get();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
protected recompute(): void {
|
|
69
|
+
const recomputeCount = ++this.recomputeCount;
|
|
70
|
+
|
|
71
|
+
if (this.stateObservable.getUntracked() !== LiveDiffState.Initializing) { // untracked to avoid an infinite change loop in the autorun
|
|
72
|
+
this.stateObservable.set(LiveDiffState.Updating);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.diffComputer.computeDiff(new URI(this.originalDocument.uri), new URI(this.modifiedDocument.uri)).then(diff => {
|
|
76
|
+
if (this.toDispose.disposed || this.originalDocument.isDisposed() || this.modifiedDocument.isDisposed()) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (recomputeCount !== this.recomputeCount) {
|
|
81
|
+
// There is a newer recompute call
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const toLineRange = (r: DiffLineRange) => new LineRange(r.start, r.end - r.start);
|
|
86
|
+
const changes = diff?.changes.map(change => new DetailedLineRangeMapping(
|
|
87
|
+
toLineRange(change.left),
|
|
88
|
+
this.originalDocument,
|
|
89
|
+
toLineRange(change.right),
|
|
90
|
+
this.modifiedDocument,
|
|
91
|
+
change.innerChanges?.map(innerChange => new RangeMapping(innerChange.left, innerChange.right))
|
|
92
|
+
));
|
|
93
|
+
|
|
94
|
+
Observable.update(() => {
|
|
95
|
+
if (changes) {
|
|
96
|
+
this.stateObservable.set(LiveDiffState.UpToDate);
|
|
97
|
+
this.changesObservable.set(changes);
|
|
98
|
+
} else {
|
|
99
|
+
this.stateObservable.set(LiveDiffState.Error);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export const enum LiveDiffState {
|
|
107
|
+
Initializing,
|
|
108
|
+
UpToDate,
|
|
109
|
+
Updating,
|
|
110
|
+
Error
|
|
111
|
+
}
|