@theia/plugin-ext 1.71.0-next.8 → 1.72.0-next.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/common/plugin-api-rpc.d.ts +76 -0
- package/lib/common/plugin-api-rpc.d.ts.map +1 -1
- package/lib/common/plugin-api-rpc.js +9 -1
- package/lib/common/plugin-api-rpc.js.map +1 -1
- package/lib/hosted/browser/hosted-plugin.d.ts.map +1 -1
- package/lib/hosted/browser/hosted-plugin.js +13 -6
- package/lib/hosted/browser/hosted-plugin.js.map +1 -1
- package/lib/main/browser/main-context.d.ts.map +1 -1
- package/lib/main/browser/main-context.js +2 -6
- package/lib/main/browser/main-context.js.map +1 -1
- package/lib/main/browser/main-file-system-event-service.d.ts +10 -2
- package/lib/main/browser/main-file-system-event-service.d.ts.map +1 -1
- package/lib/main/browser/main-file-system-event-service.js +19 -2
- package/lib/main/browser/main-file-system-event-service.js.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.d.ts.map +1 -1
- package/lib/main/browser/menus/menus-contribution-handler.js +2 -0
- package/lib/main/browser/menus/menus-contribution-handler.js.map +1 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts +1 -0
- package/lib/main/browser/menus/plugin-menu-command-adapter.d.ts.map +1 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.js +13 -1
- package/lib/main/browser/menus/plugin-menu-command-adapter.js.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.d.ts.map +1 -1
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js +9 -2
- package/lib/main/browser/menus/vscode-theia-menu-mappings.js.map +1 -1
- package/lib/main/browser/scm-main.d.ts +33 -2
- package/lib/main/browser/scm-main.d.ts.map +1 -1
- package/lib/main/browser/scm-main.js +237 -3
- package/lib/main/browser/scm-main.js.map +1 -1
- package/lib/main/browser/scm-main.spec.d.ts +2 -0
- package/lib/main/browser/scm-main.spec.d.ts.map +1 -0
- package/lib/main/browser/scm-main.spec.js +87 -0
- package/lib/main/browser/scm-main.spec.js.map +1 -0
- package/lib/main/browser/test-main.d.ts +3 -2
- package/lib/main/browser/test-main.d.ts.map +1 -1
- package/lib/main/browser/test-main.js +12 -1
- package/lib/main/browser/test-main.js.map +1 -1
- package/lib/plugin/file-system-event-service-ext-impl.d.ts +11 -5
- package/lib/plugin/file-system-event-service-ext-impl.d.ts.map +1 -1
- package/lib/plugin/file-system-event-service-ext-impl.js +28 -9
- package/lib/plugin/file-system-event-service-ext-impl.js.map +1 -1
- package/lib/plugin/plugin-context.js +4 -4
- package/lib/plugin/plugin-context.js.map +1 -1
- package/lib/plugin/scm.d.ts +8 -2
- package/lib/plugin/scm.d.ts.map +1 -1
- package/lib/plugin/scm.js +188 -5
- package/lib/plugin/scm.js.map +1 -1
- package/lib/plugin/scm.spec.d.ts +2 -0
- package/lib/plugin/scm.spec.d.ts.map +1 -0
- package/lib/plugin/scm.spec.js +461 -0
- package/lib/plugin/scm.spec.js.map +1 -0
- package/lib/plugin/terminal-ext.d.ts +13 -3
- package/lib/plugin/terminal-ext.d.ts.map +1 -1
- package/lib/plugin/terminal-ext.js +51 -10
- package/lib/plugin/terminal-ext.js.map +1 -1
- package/lib/plugin/terminal-ext.spec.d.ts +2 -0
- package/lib/plugin/terminal-ext.spec.d.ts.map +1 -0
- package/lib/plugin/terminal-ext.spec.js +285 -0
- package/lib/plugin/terminal-ext.spec.js.map +1 -0
- package/lib/plugin/test-item.d.ts.map +1 -1
- package/lib/plugin/test-item.js +8 -3
- package/lib/plugin/test-item.js.map +1 -1
- package/lib/plugin/tests.d.ts.map +1 -1
- package/lib/plugin/tests.js +15 -3
- package/lib/plugin/tests.js.map +1 -1
- package/lib/plugin/type-converters.d.ts +2 -2
- package/lib/plugin/type-converters.d.ts.map +1 -1
- package/lib/plugin/type-converters.js +3 -9
- package/lib/plugin/type-converters.js.map +1 -1
- package/lib/plugin/types-impl.d.ts +1 -1
- package/lib/plugin/types-impl.d.ts.map +1 -1
- package/lib/plugin/types-impl.js +1 -1
- package/lib/plugin/types-impl.js.map +1 -1
- package/lib/plugin/workspace.d.ts.map +1 -1
- package/lib/plugin/workspace.js +17 -3
- package/lib/plugin/workspace.js.map +1 -1
- package/package.json +39 -39
- package/src/common/plugin-api-rpc.ts +78 -0
- package/src/hosted/browser/hosted-plugin.ts +13 -6
- package/src/main/browser/main-context.ts +3 -7
- package/src/main/browser/main-file-system-event-service.ts +26 -6
- package/src/main/browser/menus/menus-contribution-handler.ts +2 -0
- package/src/main/browser/menus/plugin-menu-command-adapter.ts +15 -2
- package/src/main/browser/menus/vscode-theia-menu-mappings.ts +12 -3
- package/src/main/browser/scm-main.spec.ts +105 -0
- package/src/main/browser/scm-main.ts +272 -4
- package/src/main/browser/test-main.ts +13 -3
- package/src/plugin/file-system-event-service-ext-impl.ts +40 -14
- package/src/plugin/plugin-context.ts +7 -7
- package/src/plugin/scm.spec.ts +615 -0
- package/src/plugin/scm.ts +224 -6
- package/src/plugin/terminal-ext.spec.ts +350 -0
- package/src/plugin/terminal-ext.ts +58 -12
- package/src/plugin/test-item.ts +8 -3
- package/src/plugin/tests.ts +14 -3
- package/src/plugin/type-converters.ts +7 -13
- package/src/plugin/types-impl.ts +2 -2
- package/src/plugin/workspace.ts +17 -3
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
/**
|
|
19
|
+
* Tests for the SCM history provider bridge.
|
|
20
|
+
*
|
|
21
|
+
* These tests validate the plugin-side logic in isolation without requiring
|
|
22
|
+
* the full Theia runtime — following the pattern from workspace.spec.ts.
|
|
23
|
+
*/
|
|
24
|
+
const assert = require("assert");
|
|
25
|
+
const event_1 = require("@theia/core/lib/common/event");
|
|
26
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
27
|
+
const plugin_api_rpc_1 = require("../common/plugin-api-rpc");
|
|
28
|
+
/**
|
|
29
|
+
* Extracted from SourceControlImpl.historyProvider setter logic.
|
|
30
|
+
* Tests the event subscription and proxy notification pattern.
|
|
31
|
+
*
|
|
32
|
+
* Note: SourceControlImpl cannot be instantiated directly in unit tests because
|
|
33
|
+
* it depends on ScmMain (RPC proxy) and CommandRegistryImpl, both of which
|
|
34
|
+
* require a full Theia runtime with inversify bindings and RPC channels.
|
|
35
|
+
* Instead, the bridge pattern extracts the logic under test into a standalone
|
|
36
|
+
* class that mirrors the real implementation, following the same pattern used
|
|
37
|
+
* in workspace.spec.ts for other plugin-side logic.
|
|
38
|
+
*/
|
|
39
|
+
class HistoryProviderBridge {
|
|
40
|
+
constructor() {
|
|
41
|
+
this._historyProviderDisposables = new disposable_1.DisposableCollection();
|
|
42
|
+
this.updateSourceControlCalls = [];
|
|
43
|
+
this.onDidChangeCurrentHistoryItemRefsCalls = [];
|
|
44
|
+
this.onDidChangeHistoryItemRefsCalls = [];
|
|
45
|
+
}
|
|
46
|
+
historyItemRefToDto(ref) {
|
|
47
|
+
return { id: ref.id, name: ref.name, description: ref.description, revision: ref.revision, category: ref.category };
|
|
48
|
+
}
|
|
49
|
+
setHistoryProvider(provider) {
|
|
50
|
+
this._historyProviderDisposables.dispose();
|
|
51
|
+
this._historyProviderDisposables = new disposable_1.DisposableCollection();
|
|
52
|
+
this._historyProvider = provider;
|
|
53
|
+
if (provider) {
|
|
54
|
+
this._historyProviderDisposables.push(provider.onDidChangeCurrentHistoryItemRefs(() => {
|
|
55
|
+
this.updateSourceControlCalls.push({
|
|
56
|
+
features: {
|
|
57
|
+
hasHistoryProvider: true,
|
|
58
|
+
currentHistoryItemRef: provider.currentHistoryItemRef ? this.historyItemRefToDto(provider.currentHistoryItemRef) : undefined,
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
this.onDidChangeCurrentHistoryItemRefsCalls.push(1);
|
|
62
|
+
}));
|
|
63
|
+
this._historyProviderDisposables.push(provider.onDidChangeHistoryItemRefs((event) => {
|
|
64
|
+
this.onDidChangeHistoryItemRefsCalls.push({
|
|
65
|
+
event: {
|
|
66
|
+
added: event.added.map((r) => this.historyItemRefToDto(r)),
|
|
67
|
+
removed: event.removed.map((r) => this.historyItemRefToDto(r)),
|
|
68
|
+
modified: event.modified.map((r) => this.historyItemRefToDto(r)),
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
this.updateSourceControlCalls.push({
|
|
74
|
+
features: {
|
|
75
|
+
hasHistoryProvider: !!provider,
|
|
76
|
+
currentHistoryItemRef: provider?.currentHistoryItemRef ? this.historyItemRefToDto(provider.currentHistoryItemRef) : undefined,
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async provideHistoryItems(options) {
|
|
81
|
+
if (!this._historyProvider) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const result = await this._historyProvider.provideHistoryItems(options);
|
|
85
|
+
if (!result) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
return result.map((item) => ({
|
|
89
|
+
id: item.id,
|
|
90
|
+
parentIds: item.parentIds ? [...item.parentIds] : undefined,
|
|
91
|
+
subject: item.subject,
|
|
92
|
+
author: item.author,
|
|
93
|
+
authorEmail: item.authorEmail,
|
|
94
|
+
displayId: item.displayId,
|
|
95
|
+
timestamp: item.timestamp,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
async provideHistoryItemRefs(refs) {
|
|
99
|
+
if (!this._historyProvider) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const result = await this._historyProvider.provideHistoryItemRefs(refs);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
dispose() {
|
|
106
|
+
this._historyProviderDisposables.dispose();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
describe('SCM history provider bridge (plugin side)', () => {
|
|
110
|
+
let bridge;
|
|
111
|
+
let bridgeDisposables;
|
|
112
|
+
beforeEach(() => {
|
|
113
|
+
bridgeDisposables = new disposable_1.DisposableCollection();
|
|
114
|
+
bridge = new HistoryProviderBridge();
|
|
115
|
+
});
|
|
116
|
+
afterEach(() => {
|
|
117
|
+
bridge.dispose();
|
|
118
|
+
bridgeDisposables.dispose();
|
|
119
|
+
});
|
|
120
|
+
it('setting historyProvider sends hasHistoryProvider: true', () => {
|
|
121
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
122
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
123
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
124
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
125
|
+
const provider = {
|
|
126
|
+
currentHistoryItemRef: { id: 'refs/heads/main', name: 'main' },
|
|
127
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
128
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
129
|
+
provideHistoryItemRefs: async () => [],
|
|
130
|
+
provideHistoryItems: async () => [],
|
|
131
|
+
};
|
|
132
|
+
bridge.setHistoryProvider(provider);
|
|
133
|
+
const lastCall = bridge.updateSourceControlCalls[bridge.updateSourceControlCalls.length - 1];
|
|
134
|
+
assert.ok(lastCall, 'Expected $updateSourceControl to be called');
|
|
135
|
+
assert.strictEqual(lastCall.features.hasHistoryProvider, true);
|
|
136
|
+
assert.strictEqual(lastCall.features.currentHistoryItemRef?.id, 'refs/heads/main');
|
|
137
|
+
assert.strictEqual(lastCall.features.currentHistoryItemRef?.name, 'main');
|
|
138
|
+
});
|
|
139
|
+
it('setting historyProvider to undefined sends hasHistoryProvider: false', () => {
|
|
140
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
141
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
142
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
143
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
144
|
+
const provider = {
|
|
145
|
+
currentHistoryItemRef: undefined,
|
|
146
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
147
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
148
|
+
provideHistoryItemRefs: async () => [],
|
|
149
|
+
provideHistoryItems: async () => [],
|
|
150
|
+
};
|
|
151
|
+
bridge.setHistoryProvider(provider);
|
|
152
|
+
bridge.setHistoryProvider(undefined);
|
|
153
|
+
const lastCall = bridge.updateSourceControlCalls[bridge.updateSourceControlCalls.length - 1];
|
|
154
|
+
assert.ok(lastCall, 'Expected $updateSourceControl to be called');
|
|
155
|
+
assert.strictEqual(lastCall.features.hasHistoryProvider, false);
|
|
156
|
+
});
|
|
157
|
+
it('onDidChangeCurrentHistoryItemRefs fires proxy notification', () => {
|
|
158
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
159
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
160
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
161
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
162
|
+
const provider = {
|
|
163
|
+
currentHistoryItemRef: { id: 'refs/heads/main', name: 'main' },
|
|
164
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
165
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
166
|
+
provideHistoryItemRefs: async () => [],
|
|
167
|
+
provideHistoryItems: async () => [],
|
|
168
|
+
};
|
|
169
|
+
bridge.setHistoryProvider(provider);
|
|
170
|
+
const callsBefore = bridge.onDidChangeCurrentHistoryItemRefsCalls.length;
|
|
171
|
+
onCurrentRefs.fire();
|
|
172
|
+
assert.strictEqual(bridge.onDidChangeCurrentHistoryItemRefsCalls.length, callsBefore + 1);
|
|
173
|
+
});
|
|
174
|
+
it('onDidChangeHistoryItemRefs fires proxy notification with mapped DTOs', () => {
|
|
175
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
176
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
177
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
178
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
179
|
+
const provider = {
|
|
180
|
+
currentHistoryItemRef: undefined,
|
|
181
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
182
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
183
|
+
provideHistoryItemRefs: async () => [],
|
|
184
|
+
provideHistoryItems: async () => [],
|
|
185
|
+
};
|
|
186
|
+
bridge.setHistoryProvider(provider);
|
|
187
|
+
const changeEvent = {
|
|
188
|
+
added: [{ id: 'refs/heads/feature', name: 'feature' }],
|
|
189
|
+
removed: [],
|
|
190
|
+
modified: [],
|
|
191
|
+
};
|
|
192
|
+
onHistoryRefs.fire(changeEvent);
|
|
193
|
+
assert.strictEqual(bridge.onDidChangeHistoryItemRefsCalls.length, 1);
|
|
194
|
+
assert.strictEqual(bridge.onDidChangeHistoryItemRefsCalls[0].event.added[0].id, 'refs/heads/feature');
|
|
195
|
+
assert.strictEqual(bridge.onDidChangeHistoryItemRefsCalls[0].event.added[0].name, 'feature');
|
|
196
|
+
});
|
|
197
|
+
it('provideHistoryItems delegates to historyProvider and maps results to DTOs', async () => {
|
|
198
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
199
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
200
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
201
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
202
|
+
const expectedItems = [
|
|
203
|
+
{
|
|
204
|
+
id: 'abc123',
|
|
205
|
+
subject: 'Initial commit',
|
|
206
|
+
parentIds: [],
|
|
207
|
+
author: 'Test User',
|
|
208
|
+
authorEmail: 'test@example.com',
|
|
209
|
+
displayId: 'abc1234',
|
|
210
|
+
timestamp: 1700000000000,
|
|
211
|
+
}
|
|
212
|
+
];
|
|
213
|
+
const provider = {
|
|
214
|
+
currentHistoryItemRef: undefined,
|
|
215
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
216
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
217
|
+
provideHistoryItemRefs: async () => [],
|
|
218
|
+
provideHistoryItems: async (_opts) => expectedItems,
|
|
219
|
+
};
|
|
220
|
+
bridge.setHistoryProvider(provider);
|
|
221
|
+
const result = await bridge.provideHistoryItems({ limit: 10 });
|
|
222
|
+
assert.ok(result, 'Expected result to be defined');
|
|
223
|
+
assert.strictEqual(result.length, 1);
|
|
224
|
+
assert.strictEqual(result[0].id, 'abc123');
|
|
225
|
+
assert.strictEqual(result[0].subject, 'Initial commit');
|
|
226
|
+
assert.strictEqual(result[0].author, 'Test User');
|
|
227
|
+
assert.strictEqual(result[0].displayId, 'abc1234');
|
|
228
|
+
assert.strictEqual(result[0].timestamp, 1700000000000);
|
|
229
|
+
});
|
|
230
|
+
it('provideHistoryItems returns undefined when no history provider set', async () => {
|
|
231
|
+
const result = await bridge.provideHistoryItems({ limit: 10 });
|
|
232
|
+
assert.strictEqual(result, undefined);
|
|
233
|
+
});
|
|
234
|
+
it('provideHistoryItemRefs delegates to historyProvider', async () => {
|
|
235
|
+
const onCurrentRefs = new event_1.Emitter();
|
|
236
|
+
const onHistoryRefs = new event_1.Emitter();
|
|
237
|
+
bridgeDisposables.push(onCurrentRefs);
|
|
238
|
+
bridgeDisposables.push(onHistoryRefs);
|
|
239
|
+
const expectedRefs = [
|
|
240
|
+
{ id: 'refs/heads/main', name: 'main' },
|
|
241
|
+
{ id: 'refs/heads/feature', name: 'feature' },
|
|
242
|
+
];
|
|
243
|
+
const provider = {
|
|
244
|
+
currentHistoryItemRef: undefined,
|
|
245
|
+
onDidChangeCurrentHistoryItemRefs: onCurrentRefs.event,
|
|
246
|
+
onDidChangeHistoryItemRefs: onHistoryRefs.event,
|
|
247
|
+
provideHistoryItemRefs: async () => expectedRefs,
|
|
248
|
+
provideHistoryItems: async () => [],
|
|
249
|
+
};
|
|
250
|
+
bridge.setHistoryProvider(provider);
|
|
251
|
+
const result = await bridge.provideHistoryItemRefs(undefined);
|
|
252
|
+
assert.ok(result, 'Expected result to be defined');
|
|
253
|
+
assert.strictEqual(result.length, 2);
|
|
254
|
+
assert.strictEqual(result[0].id, 'refs/heads/main');
|
|
255
|
+
assert.strictEqual(result[1].id, 'refs/heads/feature');
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
describe('SCM history command arg type guards and processors', () => {
|
|
259
|
+
describe('ScmHistoryItemCommandArg.is()', () => {
|
|
260
|
+
it('returns true for historyItem arg with all required fields', () => {
|
|
261
|
+
const arg = { sourceControlHandle: 0, id: 'abc', type: 'historyItem' };
|
|
262
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(arg), true);
|
|
263
|
+
});
|
|
264
|
+
it('returns true for historyItemRef arg with all required fields', () => {
|
|
265
|
+
const arg = { sourceControlHandle: 1, id: 'refs/heads/main', type: 'historyItemRef' };
|
|
266
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(arg), true);
|
|
267
|
+
});
|
|
268
|
+
it('returns false for plain ScmCommandArg (sourceControlHandle only)', () => {
|
|
269
|
+
const arg = { sourceControlHandle: 0 };
|
|
270
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(arg), false);
|
|
271
|
+
});
|
|
272
|
+
it('returns false for null and non-objects', () => {
|
|
273
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(undefined), false);
|
|
274
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is('string'), false);
|
|
275
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(42), false);
|
|
276
|
+
});
|
|
277
|
+
it('returns false for object missing id field', () => {
|
|
278
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is({ sourceControlHandle: 0, type: 'historyItem' }), false);
|
|
279
|
+
});
|
|
280
|
+
it('returns false for object missing sourceControlHandle', () => {
|
|
281
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is({ id: 'abc', type: 'historyItem' }), false);
|
|
282
|
+
});
|
|
283
|
+
it('returns false for object missing type field', () => {
|
|
284
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is({ sourceControlHandle: 0, id: 'abc' }), false);
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
describe('Guard specificity: ScmCommandArg.is() vs ScmHistoryItemCommandArg.is()', () => {
|
|
288
|
+
it('ScmCommandArg.is() matches history item args (broad guard)', () => {
|
|
289
|
+
// ScmCommandArg only checks for sourceControlHandle — it DOES match history args.
|
|
290
|
+
// This is why history processors are registered before the generic processor,
|
|
291
|
+
// so the more-specific guard wins by running first.
|
|
292
|
+
const historyItemArg = { sourceControlHandle: 0, id: 'abc', type: 'historyItem' };
|
|
293
|
+
assert.strictEqual(plugin_api_rpc_1.ScmCommandArg.is(historyItemArg), true, 'ScmCommandArg.is() matches history item args because it only checks sourceControlHandle');
|
|
294
|
+
});
|
|
295
|
+
it('ScmHistoryItemCommandArg.is() does NOT match plain ScmCommandArg', () => {
|
|
296
|
+
const plainArg = { sourceControlHandle: 0 };
|
|
297
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(plainArg), false, 'ScmHistoryItemCommandArg.is() requires id and type to be present');
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
describe('History item argument processor', () => {
|
|
301
|
+
function makeHistoryItemProcessor(sourceControls) {
|
|
302
|
+
return (arg) => {
|
|
303
|
+
if (!plugin_api_rpc_1.ScmHistoryItemCommandArg.is(arg) || arg.type !== 'historyItem') {
|
|
304
|
+
return arg;
|
|
305
|
+
}
|
|
306
|
+
const sourceControl = sourceControls.get(arg.sourceControlHandle);
|
|
307
|
+
if (!sourceControl?.historyProvider) {
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
return { id: arg.id };
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function makeHistoryItemRefProcessor(sourceControls) {
|
|
314
|
+
return (arg) => {
|
|
315
|
+
if (!plugin_api_rpc_1.ScmHistoryItemCommandArg.is(arg) || arg.type !== 'historyItemRef') {
|
|
316
|
+
return arg;
|
|
317
|
+
}
|
|
318
|
+
const sourceControl = sourceControls.get(arg.sourceControlHandle);
|
|
319
|
+
if (!sourceControl?.historyProvider) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
322
|
+
const provider = sourceControl.historyProvider;
|
|
323
|
+
const ref = [provider.currentHistoryItemRef, provider.currentHistoryItemRemoteRef, provider.currentHistoryItemBaseRef]
|
|
324
|
+
.find((r) => r?.id === arg.id);
|
|
325
|
+
return ref ?? { id: arg.id };
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
function makeGenericScmProcessor(sourceControls) {
|
|
329
|
+
return (arg) => {
|
|
330
|
+
if (!plugin_api_rpc_1.ScmCommandArg.is(arg)) {
|
|
331
|
+
return arg;
|
|
332
|
+
}
|
|
333
|
+
const sourceControl = sourceControls.get(arg.sourceControlHandle);
|
|
334
|
+
if (!sourceControl) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
return sourceControl;
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
it('history item processor returns { id } for a known history item', () => {
|
|
341
|
+
const sourceControls = new Map();
|
|
342
|
+
sourceControls.set(0, { historyProvider: { id: 'git' } });
|
|
343
|
+
const processor = makeHistoryItemProcessor(sourceControls);
|
|
344
|
+
const arg = { sourceControlHandle: 0, id: 'abc123', type: 'historyItem' };
|
|
345
|
+
const result = processor(arg);
|
|
346
|
+
assert.deepStrictEqual(result, { id: 'abc123' });
|
|
347
|
+
});
|
|
348
|
+
it('history item processor returns undefined when source control has no historyProvider', () => {
|
|
349
|
+
const sourceControls = new Map();
|
|
350
|
+
sourceControls.set(0, { historyProvider: undefined });
|
|
351
|
+
const processor = makeHistoryItemProcessor(sourceControls);
|
|
352
|
+
const arg = { sourceControlHandle: 0, id: 'abc123', type: 'historyItem' };
|
|
353
|
+
const result = processor(arg);
|
|
354
|
+
assert.strictEqual(result, undefined);
|
|
355
|
+
});
|
|
356
|
+
it('history item ref processor returns currentHistoryItemRef from provider when id matches', () => {
|
|
357
|
+
const currentRef = { id: 'refs/heads/main', name: 'main' };
|
|
358
|
+
const sourceControls = new Map();
|
|
359
|
+
sourceControls.set(0, { historyProvider: { id: 'git', currentHistoryItemRef: currentRef } });
|
|
360
|
+
const processor = makeHistoryItemRefProcessor(sourceControls);
|
|
361
|
+
const arg = { sourceControlHandle: 0, id: 'refs/heads/main', type: 'historyItemRef' };
|
|
362
|
+
const result = processor(arg);
|
|
363
|
+
assert.strictEqual(result, currentRef, 'should return the exact provider ref object');
|
|
364
|
+
});
|
|
365
|
+
it('history item ref processor returns { id } when ref id is not among current provider refs', () => {
|
|
366
|
+
const sourceControls = new Map();
|
|
367
|
+
sourceControls.set(0, { historyProvider: { id: 'git', currentHistoryItemRef: { id: 'refs/heads/main', name: 'main' } } });
|
|
368
|
+
const processor = makeHistoryItemRefProcessor(sourceControls);
|
|
369
|
+
const arg = { sourceControlHandle: 0, id: 'refs/heads/other', type: 'historyItemRef' };
|
|
370
|
+
const result = processor(arg);
|
|
371
|
+
assert.deepStrictEqual(result, { id: 'refs/heads/other' });
|
|
372
|
+
});
|
|
373
|
+
it('type discriminator: historyItem arg is NOT processed by ref processor', () => {
|
|
374
|
+
const sourceControls = new Map();
|
|
375
|
+
const currentRef = { id: 'refs/heads/main', name: 'main' };
|
|
376
|
+
sourceControls.set(0, { historyProvider: { id: 'git', currentHistoryItemRef: currentRef } });
|
|
377
|
+
const refProcessor = makeHistoryItemRefProcessor(sourceControls);
|
|
378
|
+
const historyItemArg = { sourceControlHandle: 0, id: 'refs/heads/main', type: 'historyItem' };
|
|
379
|
+
// Even though the id matches a known ref, the type discriminator prevents the ref
|
|
380
|
+
// processor from consuming it — it should be passed through unchanged.
|
|
381
|
+
const result = refProcessor(historyItemArg);
|
|
382
|
+
assert.strictEqual(result, historyItemArg, 'ref processor must not consume an arg with type historyItem');
|
|
383
|
+
});
|
|
384
|
+
it('type discriminator: historyItemRef arg is NOT processed by item processor', () => {
|
|
385
|
+
const sourceControls = new Map();
|
|
386
|
+
sourceControls.set(0, { historyProvider: { id: 'git' } });
|
|
387
|
+
const itemProcessor = makeHistoryItemProcessor(sourceControls);
|
|
388
|
+
const refArg = { sourceControlHandle: 0, id: 'refs/heads/main', type: 'historyItemRef' };
|
|
389
|
+
// The item processor must not consume an arg with type historyItemRef.
|
|
390
|
+
const result = itemProcessor(refArg);
|
|
391
|
+
assert.strictEqual(result, refArg, 'item processor must not consume an arg with type historyItemRef');
|
|
392
|
+
});
|
|
393
|
+
it('type discriminator fixes ordering bug: ref arg survives processor 1 intact', () => {
|
|
394
|
+
// Regression test for the ordering bug described in the task:
|
|
395
|
+
// Before the fix, Processor 1 (historyItem) would intercept the ref arg because
|
|
396
|
+
// both processors used the same ScmHistoryItemCommandArg.is() guard without
|
|
397
|
+
// checking the type discriminator. The ref arg would be "resolved" as a missing
|
|
398
|
+
// history item and returned as { id: ref.id }, stripping sourceControlHandle.
|
|
399
|
+
// Processor 2 would then fail to match (no sourceControlHandle) and pass through
|
|
400
|
+
// the degraded { id } object.
|
|
401
|
+
//
|
|
402
|
+
// With the fix, Processor 1 sees type === 'historyItemRef', skips, and passes the
|
|
403
|
+
// arg through unchanged so Processor 2 can correctly resolve it.
|
|
404
|
+
const sourceControls = new Map();
|
|
405
|
+
const mainRef = { id: 'refs/heads/main', name: 'main' };
|
|
406
|
+
sourceControls.set(0, { historyProvider: { id: 'git', currentHistoryItemRef: mainRef } });
|
|
407
|
+
const itemProcessor = makeHistoryItemProcessor(sourceControls);
|
|
408
|
+
const refProcessor = makeHistoryItemRefProcessor(sourceControls);
|
|
409
|
+
const refArg = { sourceControlHandle: 0, id: 'refs/heads/main', type: 'historyItemRef' };
|
|
410
|
+
// Simulate the reduce chain: arg passes through processor 1, then processor 2
|
|
411
|
+
const afterP1 = itemProcessor(refArg);
|
|
412
|
+
// Processor 1 must pass it through unchanged (not strip sourceControlHandle)
|
|
413
|
+
assert.strictEqual(afterP1, refArg, 'Processor 1 must not consume the historyItemRef arg');
|
|
414
|
+
const afterP2 = refProcessor(afterP1);
|
|
415
|
+
// Processor 2 must resolve it to the full ref object
|
|
416
|
+
assert.strictEqual(afterP2, mainRef, 'Processor 2 must resolve the ref arg to the full SourceControlHistoryItemRef');
|
|
417
|
+
});
|
|
418
|
+
it('discriminated interface works for both history items and refs: type field routes correctly', () => {
|
|
419
|
+
const sourceControls = new Map();
|
|
420
|
+
const remoteRef = { id: 'refs/remotes/origin/main', name: 'origin/main' };
|
|
421
|
+
sourceControls.set(1, { historyProvider: { id: 'git', currentHistoryItemRemoteRef: remoteRef } });
|
|
422
|
+
const historyItemArg = { sourceControlHandle: 1, id: 'deadbeef', type: 'historyItem' };
|
|
423
|
+
const historyRefArg = { sourceControlHandle: 1, id: 'refs/remotes/origin/main', type: 'historyItemRef' };
|
|
424
|
+
// Both are valid ScmHistoryItemCommandArg
|
|
425
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(historyItemArg), true);
|
|
426
|
+
assert.strictEqual(plugin_api_rpc_1.ScmHistoryItemCommandArg.is(historyRefArg), true);
|
|
427
|
+
// Item processor resolves a commit by id (skips ref arg)
|
|
428
|
+
const itemProcessor = makeHistoryItemProcessor(sourceControls);
|
|
429
|
+
assert.deepStrictEqual(itemProcessor(historyItemArg), { id: 'deadbeef' });
|
|
430
|
+
assert.strictEqual(itemProcessor(historyRefArg), historyRefArg, 'item processor must pass through historyItemRef args unchanged');
|
|
431
|
+
// Ref processor resolves a ref by id (skips item arg)
|
|
432
|
+
const refProcessor = makeHistoryItemRefProcessor(sourceControls);
|
|
433
|
+
assert.strictEqual(refProcessor(historyRefArg), remoteRef);
|
|
434
|
+
assert.strictEqual(refProcessor(historyItemArg), historyItemArg, 'ref processor must pass through historyItem args unchanged');
|
|
435
|
+
});
|
|
436
|
+
it('generic ScmCommandArg processor does NOT match history item args (guard specificity)', () => {
|
|
437
|
+
// Because we rely on registration order (history processors run first),
|
|
438
|
+
// verify here that if the generic processor receives a history item arg,
|
|
439
|
+
// it would treat it as a plain ScmCommandArg and NOT pass it through unchanged.
|
|
440
|
+
const sourceControls = new Map();
|
|
441
|
+
sourceControls.set(0, { historyProvider: { id: 'git' } });
|
|
442
|
+
const genericProcessor = makeGenericScmProcessor(sourceControls);
|
|
443
|
+
const historyItemArg = { sourceControlHandle: 0, id: 'abc123', type: 'historyItem' };
|
|
444
|
+
// The generic processor DOES match (ScmCommandArg.is() is true for history args),
|
|
445
|
+
// but it returns the sourceControl object — not the historyItem shape.
|
|
446
|
+
// This confirms why history processors must be registered first.
|
|
447
|
+
const result = genericProcessor(historyItemArg);
|
|
448
|
+
assert.ok(result !== undefined, 'Generic processor matched history item arg');
|
|
449
|
+
assert.ok(!('id' in result && Object.keys(result).length === 1), 'Generic processor should NOT return the history item shape { id }');
|
|
450
|
+
});
|
|
451
|
+
it('history item processor passes through non-matching args unchanged', () => {
|
|
452
|
+
const sourceControls = new Map();
|
|
453
|
+
const processor = makeHistoryItemProcessor(sourceControls);
|
|
454
|
+
const plainArg = { sourceControlHandle: 42 };
|
|
455
|
+
const result = processor(plainArg);
|
|
456
|
+
// Not a ScmHistoryItemCommandArg (missing 'id' and 'type'), so returned unchanged
|
|
457
|
+
assert.strictEqual(result, plainArg);
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
//# sourceMappingURL=scm.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scm.spec.js","sourceRoot":"","sources":["../../src/plugin/scm.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,12 @@ import { ProvidedTerminalLink } from '../common/plugin-api-rpc-model';
|
|
|
13
13
|
export declare class TerminalServiceExtImpl implements TerminalServiceExt {
|
|
14
14
|
private readonly proxy;
|
|
15
15
|
private readonly _terminals;
|
|
16
|
+
/**
|
|
17
|
+
* Stores the API objects (Proxies) returned to plugins for each terminal.
|
|
18
|
+
* This ensures that events fire with the same object instance that plugins received,
|
|
19
|
+
* allowing strict equality checks (===) to work correctly.
|
|
20
|
+
*/
|
|
21
|
+
private readonly _terminalApiObjects;
|
|
16
22
|
private readonly _pseudoTerminals;
|
|
17
23
|
private static nextProviderId;
|
|
18
24
|
private readonly terminalLinkProviders;
|
|
@@ -31,12 +37,16 @@ export declare class TerminalServiceExtImpl implements TerminalServiceExt {
|
|
|
31
37
|
private readonly onDidChangeShellEmitter;
|
|
32
38
|
readonly onDidChangeShell: theia.Event<string>;
|
|
33
39
|
constructor(rpc: RPCProtocol);
|
|
34
|
-
get terminals():
|
|
40
|
+
get terminals(): theia.Terminal[];
|
|
35
41
|
get defaultShell(): string;
|
|
36
42
|
$setShell(shell: string): Promise<void>;
|
|
37
|
-
createTerminal(plugin: Plugin, nameOrOptions: theia.TerminalOptions | theia.PseudoTerminalOptions | theia.ExtensionTerminalOptions | string | undefined, shellPath?: string, shellArgs?: string[] | string): theia.Terminal;
|
|
43
|
+
createTerminal(plugin: Plugin, nameOrOptions: theia.TerminalOptions | theia.PseudoTerminalOptions | theia.ExtensionTerminalOptions | string | undefined, shellPath?: string, shellArgs?: string[] | string, apiObjectWrapper?: (terminal: TerminalExtImpl) => theia.Terminal): theia.Terminal;
|
|
38
44
|
attachPtyToTerminal(terminalId: number, pty: theia.Pseudoterminal): void;
|
|
39
45
|
protected obtainTerminal(id: string, name: string, options?: theia.TerminalOptions | theia.ExtensionTerminalOptions): TerminalExtImpl;
|
|
46
|
+
/**
|
|
47
|
+
* Gets the API object for a terminal by ID, falling back to the raw terminal if not set.
|
|
48
|
+
*/
|
|
49
|
+
protected getApiObject(id: string): theia.Terminal | undefined;
|
|
40
50
|
$terminalOnInput(id: string, data: string): void;
|
|
41
51
|
$terminalOnInteraction(id: string): void;
|
|
42
52
|
$terminalShellTypeChanged(id: string, shellType: string): void;
|
|
@@ -46,7 +56,7 @@ export declare class TerminalServiceExtImpl implements TerminalServiceExt {
|
|
|
46
56
|
$terminalOpened(id: string, processId: number, terminalId: number, cols: number, rows: number): void;
|
|
47
57
|
$terminalClosed(id: string, exitStatus: theia.TerminalExitStatus | undefined): void;
|
|
48
58
|
private activeTerminalId;
|
|
49
|
-
get activeTerminal():
|
|
59
|
+
get activeTerminal(): theia.Terminal | undefined;
|
|
50
60
|
$currentTerminalChanged(id: string | undefined): void;
|
|
51
61
|
registerTerminalLinkProvider(provider: theia.TerminalLinkProvider): theia.Disposable;
|
|
52
62
|
registerTerminalProfileProvider(id: string, provider: theia.TerminalProfileProvider): theia.Disposable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-ext.d.ts","sourceRoot":"","sources":["../../src/plugin/terminal-ext.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAsB,MAAM,EAAmB,MAAM,0BAA0B,CAAC;AAChI,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AAGvC,OAAO,EAAe,yCAAyC,EAAE,MAAM,oDAAoD,CAAC;AAC5H,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE;;;GAGG;AACH,qBACa,sBAAuB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsB;IAE5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IAEjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IAEtE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAiD;IACvF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAC/E,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAoD;IAC7F,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAiC;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAwC;IAEhG,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAiC;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAuC;IAE9F,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAA6C;IAC9F,QAAQ,CAAC,yBAAyB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAA+C;IAE1H,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAiC;IACjF,QAAQ,CAAC,wBAAwB,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAA8C;IAE5G,SAAS,CAAC,8BAA8B,EAAE,WAAW,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAsB;IAEtH,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyB;IACjE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAsC;gBAEnD,GAAG,EAAE,WAAW;IAIjD,IAAI,SAAS,IAAI,
|
|
1
|
+
{"version":3,"file":"terminal-ext.d.ts","sourceRoot":"","sources":["../../src/plugin/terminal-ext.ts"],"names":[],"mappings":"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"}
|