@codingame/monaco-vscode-extensions-service-override 4.1.0 → 4.1.1

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.
Files changed (109) hide show
  1. package/_virtual/semver.js +3 -0
  2. package/extensions.js +6 -6
  3. package/external/vscode-semver/semver.js +985 -0
  4. package/override/vs/workbench/browser/parts/editor/textEditor.weak.js +8 -0
  5. package/package.json +9 -9
  6. package/vscode/src/vs/base/common/console.js +62 -0
  7. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +497 -0
  8. package/vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js +44 -0
  9. package/vscode/src/vs/platform/lifecycle/common/lifecycle.js +27 -0
  10. package/vscode/src/vs/platform/remote/common/managedSocket.js +98 -0
  11. package/vscode/src/vs/workbench/api/browser/extensionHost.contribution.js +104 -0
  12. package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +31 -0
  13. package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +35 -0
  14. package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +254 -0
  15. package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +68 -0
  16. package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +103 -0
  17. package/vscode/src/vs/workbench/api/browser/mainThreadChat.js +70 -0
  18. package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +207 -0
  19. package/vscode/src/vs/workbench/api/browser/mainThreadChatVariables.js +41 -0
  20. package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +24 -0
  21. package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +108 -0
  22. package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +98 -0
  23. package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +560 -0
  24. package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +80 -0
  25. package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +35 -0
  26. package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +579 -0
  27. package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +435 -0
  28. package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +102 -0
  29. package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +69 -0
  30. package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +68 -0
  31. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +79 -0
  32. package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +253 -0
  33. package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +370 -0
  34. package/vscode/src/vs/workbench/api/browser/mainThreadDownloadService.js +22 -0
  35. package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +41 -0
  36. package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +414 -0
  37. package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +501 -0
  38. package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +227 -0
  39. package/vscode/src/vs/workbench/api/browser/mainThreadErrors.js +24 -0
  40. package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +317 -0
  41. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +208 -0
  42. package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +369 -0
  43. package/vscode/src/vs/workbench/api/browser/mainThreadInlineChat.js +72 -0
  44. package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +28 -0
  45. package/vscode/src/vs/workbench/api/browser/mainThreadIssueReporter.js +50 -0
  46. package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +27 -0
  47. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +1016 -0
  48. package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +185 -0
  49. package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +78 -0
  50. package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +35 -0
  51. package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +78 -0
  52. package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +93 -0
  53. package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +137 -0
  54. package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +194 -0
  55. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +123 -0
  56. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +188 -0
  57. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.js +129 -0
  58. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +131 -0
  59. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +374 -0
  60. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookRenderers.js +25 -0
  61. package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +48 -0
  62. package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +76 -0
  63. package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js +38 -0
  64. package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +68 -0
  65. package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +42 -0
  66. package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +185 -0
  67. package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +30 -0
  68. package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +493 -0
  69. package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +49 -0
  70. package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +168 -0
  71. package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +70 -0
  72. package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +50 -0
  73. package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.js +99 -0
  74. package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +53 -0
  75. package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +72 -0
  76. package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +731 -0
  77. package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +53 -0
  78. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +409 -0
  79. package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +51 -0
  80. package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +219 -0
  81. package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +24 -0
  82. package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +55 -0
  83. package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +312 -0
  84. package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +223 -0
  85. package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +110 -0
  86. package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +61 -0
  87. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +29 -0
  88. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +283 -0
  89. package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.js +100 -0
  90. package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +135 -0
  91. package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +57 -0
  92. package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +268 -0
  93. package/vscode/src/vs/workbench/api/common/shared/dataTransferCache.js +35 -0
  94. package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +76 -0
  95. package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +83 -0
  96. package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +285 -0
  97. package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +276 -0
  98. package/vscode/src/vs/workbench/services/extensions/browser/webWorkerFileSystemProvider.js +52 -0
  99. package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +1149 -0
  100. package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.js +41 -0
  101. package/vscode/src/vs/workbench/services/extensions/common/extensionDevOptions.js +25 -0
  102. package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +512 -0
  103. package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +274 -0
  104. package/vscode/src/vs/workbench/services/extensions/common/extensionStorageMigration.js +58 -0
  105. package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +80 -0
  106. package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +64 -0
  107. package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +161 -0
  108. package/vscode/src/vs/workbench/services/extensions/common/remoteConsoleUtil.js +49 -0
  109. package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +222 -0
@@ -0,0 +1,219 @@
1
+ import { __decorate, __param } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { Event } from 'vscode/vscode/vs/base/common/event';
3
+ import { Disposable, MutableDisposable, DisposableStore, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
4
+ import { transaction } from 'vscode/vscode/vs/base/common/observableInternal/base';
5
+ import 'vscode/vscode/vs/base/common/observableInternal/derived';
6
+ import 'vscode/vscode/vs/base/common/observableInternal/autorun';
7
+ import 'vscode/vscode/vs/base/common/observableInternal/utils';
8
+ import 'vscode/vscode/vs/base/common/cancellation';
9
+ import { WellDefinedPrefixTree } from 'vscode/vscode/vs/base/common/prefixTree';
10
+ import { URI } from 'vscode/vscode/vs/base/common/uri';
11
+ import { Range } from 'vscode/vscode/vs/editor/common/core/range';
12
+ import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity';
13
+ import { MutableObservableValue } from 'vscode/vscode/vs/workbench/contrib/testing/common/observableValue';
14
+ import { TestCoverage } from 'vscode/vscode/vs/workbench/contrib/testing/common/testCoverage';
15
+ import { TestId } from 'vscode/vscode/vs/workbench/contrib/testing/common/testId';
16
+ import { ITestProfileService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testProfileService';
17
+ import { LiveTestResult } from 'vscode/vscode/vs/workbench/contrib/testing/common/testResult';
18
+ import { ITestResultService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testResultService';
19
+ import { ITestService } from 'vscode/vscode/vs/workbench/contrib/testing/common/testService';
20
+ import { ITestItem, IFileCoverage, CoverageDetails, ITestMessage, TestsDiffOp } from 'vscode/vscode/vs/workbench/contrib/testing/common/testTypes';
21
+ import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
22
+ import { MainContext, ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
23
+
24
+ let MainThreadTesting = class MainThreadTesting extends Disposable {
25
+ constructor(extHostContext, uriIdentityService, testService, testProfiles, resultService) {
26
+ super();
27
+ this.uriIdentityService = uriIdentityService;
28
+ this.testService = testService;
29
+ this.testProfiles = testProfiles;
30
+ this.resultService = resultService;
31
+ this.diffListener = this._register(( new MutableDisposable()));
32
+ this.testProviderRegistrations = ( new Map());
33
+ this.proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostTesting));
34
+ this._register(this.testService.onDidCancelTestRun(({ runId }) => {
35
+ this.proxy.$cancelExtensionTestRun(runId);
36
+ }));
37
+ this._register(Event.debounce(testProfiles.onDidChange, (_last, e) => e)(() => {
38
+ const obj = {};
39
+ for (const group of [2 , 4 , 8 ]) {
40
+ for (const profile of this.testProfiles.getGroupDefaultProfiles(group)) {
41
+ obj[profile.controllerId] ??= [];
42
+ obj[profile.controllerId].push(profile.profileId);
43
+ }
44
+ }
45
+ this.proxy.$setDefaultRunProfiles(obj);
46
+ }));
47
+ this._register(resultService.onResultsChanged(evt => {
48
+ if ('completed' in evt) {
49
+ const serialized = evt.completed.toJSONWithMessages();
50
+ if (serialized) {
51
+ this.proxy.$publishTestResults([serialized]);
52
+ }
53
+ }
54
+ else if ('removed' in evt) {
55
+ evt.removed.forEach(r => {
56
+ if (r instanceof LiveTestResult) {
57
+ this.proxy.$disposeRun(r.id);
58
+ }
59
+ });
60
+ }
61
+ }));
62
+ }
63
+ $markTestRetired(testIds) {
64
+ let tree;
65
+ if (testIds) {
66
+ tree = ( new WellDefinedPrefixTree());
67
+ for (const id of testIds) {
68
+ tree.insert(TestId.fromString(id).path, undefined);
69
+ }
70
+ }
71
+ for (const result of this.resultService.results) {
72
+ if (result instanceof LiveTestResult) {
73
+ result.markRetired(tree);
74
+ }
75
+ }
76
+ }
77
+ $publishTestRunProfile(profile) {
78
+ const controller = this.testProviderRegistrations.get(profile.controllerId);
79
+ if (controller) {
80
+ this.testProfiles.addProfile(controller.instance, profile);
81
+ }
82
+ }
83
+ $updateTestRunConfig(controllerId, profileId, update) {
84
+ this.testProfiles.updateProfile(controllerId, profileId, update);
85
+ }
86
+ $removeTestProfile(controllerId, profileId) {
87
+ this.testProfiles.removeProfile(controllerId, profileId);
88
+ }
89
+ $addTestsToRun(controllerId, runId, tests) {
90
+ this.withLiveRun(runId, r => r.addTestChainToRun(controllerId, ( tests.map(t => ITestItem.deserialize(this.uriIdentityService, t)))));
91
+ }
92
+ $appendCoverage(runId, taskId, coverage) {
93
+ this.withLiveRun(runId, run => {
94
+ const task = run.tasks.find(t => t.id === taskId);
95
+ if (!task) {
96
+ return;
97
+ }
98
+ const deserialized = IFileCoverage.deserialize(this.uriIdentityService, coverage);
99
+ transaction(tx => {
100
+ let value = task.coverage.read(undefined);
101
+ if (!value) {
102
+ value = ( new TestCoverage(taskId, this.uriIdentityService, {
103
+ getCoverageDetails: (id, token) => this.proxy.$getCoverageDetails(id, token)
104
+ .then(r => ( r.map(CoverageDetails.deserialize))),
105
+ }));
106
+ value.append(deserialized, tx);
107
+ task.coverage.set(value, tx);
108
+ }
109
+ else {
110
+ value.append(deserialized, tx);
111
+ }
112
+ });
113
+ });
114
+ }
115
+ $startedExtensionTestRun(req) {
116
+ this.resultService.createLiveResult(req);
117
+ }
118
+ $startedTestRunTask(runId, task) {
119
+ this.withLiveRun(runId, r => r.addTask(task));
120
+ }
121
+ $finishedTestRunTask(runId, taskId) {
122
+ this.withLiveRun(runId, r => r.markTaskComplete(taskId));
123
+ }
124
+ $finishedExtensionTestRun(runId) {
125
+ this.withLiveRun(runId, r => r.markComplete());
126
+ }
127
+ $updateTestStateInRun(runId, taskId, testId, state, duration) {
128
+ this.withLiveRun(runId, r => r.updateState(testId, taskId, state, duration));
129
+ }
130
+ $appendOutputToRun(runId, taskId, output, locationDto, testId) {
131
+ const location = locationDto && {
132
+ uri: URI.revive(locationDto.uri),
133
+ range: Range.lift(locationDto.range)
134
+ };
135
+ this.withLiveRun(runId, r => r.appendOutput(output, taskId, location, testId));
136
+ }
137
+ $appendTestMessagesInRun(runId, taskId, testId, messages) {
138
+ const r = this.resultService.getResult(runId);
139
+ if (r && r instanceof LiveTestResult) {
140
+ for (const message of messages) {
141
+ r.appendMessage(testId, taskId, ITestMessage.deserialize(this.uriIdentityService, message));
142
+ }
143
+ }
144
+ }
145
+ $registerTestController(controllerId, labelStr, canRefreshValue) {
146
+ const disposable = ( new DisposableStore());
147
+ const label = disposable.add(( new MutableObservableValue(labelStr)));
148
+ const canRefresh = disposable.add(( new MutableObservableValue(canRefreshValue)));
149
+ const controller = {
150
+ id: controllerId,
151
+ label,
152
+ canRefresh,
153
+ syncTests: () => this.proxy.$syncTests(),
154
+ refreshTests: token => this.proxy.$refreshTests(controllerId, token),
155
+ configureRunProfile: id => this.proxy.$configureRunProfile(controllerId, id),
156
+ runTests: (reqs, token) => this.proxy.$runControllerTests(reqs, token),
157
+ startContinuousRun: (reqs, token) => this.proxy.$startContinuousRun(reqs, token),
158
+ expandTest: (testId, levels) => this.proxy.$expandTest(testId, isFinite(levels) ? levels : -1),
159
+ };
160
+ disposable.add(toDisposable(() => this.testProfiles.removeProfile(controllerId)));
161
+ disposable.add(this.testService.registerTestController(controllerId, controller));
162
+ this.testProviderRegistrations.set(controllerId, {
163
+ instance: controller,
164
+ label,
165
+ canRefresh,
166
+ disposable
167
+ });
168
+ }
169
+ $updateController(controllerId, patch) {
170
+ const controller = this.testProviderRegistrations.get(controllerId);
171
+ if (!controller) {
172
+ return;
173
+ }
174
+ if (patch.label !== undefined) {
175
+ controller.label.value = patch.label;
176
+ }
177
+ if (patch.canRefresh !== undefined) {
178
+ controller.canRefresh.value = patch.canRefresh;
179
+ }
180
+ }
181
+ $unregisterTestController(controllerId) {
182
+ this.testProviderRegistrations.get(controllerId)?.disposable.dispose();
183
+ this.testProviderRegistrations.delete(controllerId);
184
+ }
185
+ $subscribeToDiffs() {
186
+ this.proxy.$acceptDiff(( this.testService.collection.getReviverDiff().map(TestsDiffOp.serialize)));
187
+ this.diffListener.value = this.testService.onDidProcessDiff(this.proxy.$acceptDiff, this.proxy);
188
+ }
189
+ $unsubscribeFromDiffs() {
190
+ this.diffListener.clear();
191
+ }
192
+ $publishDiff(controllerId, diff) {
193
+ this.testService.publishDiff(controllerId, ( diff.map(d => TestsDiffOp.deserialize(this.uriIdentityService, d))));
194
+ }
195
+ async $runTests(req, token) {
196
+ const result = await this.testService.runResolvedTests(req, token);
197
+ return result.id;
198
+ }
199
+ dispose() {
200
+ super.dispose();
201
+ for (const subscription of ( this.testProviderRegistrations.values())) {
202
+ subscription.disposable.dispose();
203
+ }
204
+ this.testProviderRegistrations.clear();
205
+ }
206
+ withLiveRun(runId, fn) {
207
+ const r = this.resultService.getResult(runId);
208
+ return r && r instanceof LiveTestResult ? fn(r) : undefined;
209
+ }
210
+ };
211
+ MainThreadTesting = __decorate([
212
+ extHostNamedCustomer(MainContext.MainThreadTesting),
213
+ ( __param(1, IUriIdentityService)),
214
+ ( __param(2, ITestService)),
215
+ ( __param(3, ITestProfileService)),
216
+ ( __param(4, ITestResultService))
217
+ ], MainThreadTesting);
218
+
219
+ export { MainThreadTesting };
@@ -0,0 +1,24 @@
1
+ import { __decorate, __param } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { MainContext, ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
3
+ import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
4
+ import { IThemeService } from 'vscode/vscode/vs/platform/theme/common/themeService';
5
+
6
+ let MainThreadTheming = class MainThreadTheming {
7
+ constructor(extHostContext, themeService) {
8
+ this._themeService = themeService;
9
+ this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostTheming));
10
+ this._themeChangeListener = this._themeService.onDidColorThemeChange(e => {
11
+ this._proxy.$onColorThemeChange(this._themeService.getColorTheme().type);
12
+ });
13
+ this._proxy.$onColorThemeChange(this._themeService.getColorTheme().type);
14
+ }
15
+ dispose() {
16
+ this._themeChangeListener.dispose();
17
+ }
18
+ };
19
+ MainThreadTheming = __decorate([
20
+ extHostNamedCustomer(MainContext.MainThreadTheming),
21
+ ( __param(1, IThemeService))
22
+ ], MainThreadTheming);
23
+
24
+ export { MainThreadTheming };
@@ -0,0 +1,55 @@
1
+ import { __decorate, __param } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { Emitter } from 'vscode/vscode/vs/base/common/event';
3
+ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
4
+ import { MainContext, ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
5
+ import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
6
+ import { ITimelineService } from 'vscode/vscode/vs/workbench/contrib/timeline/common/timeline';
7
+ import { revive } from 'vscode/vscode/vs/base/common/marshalling';
8
+
9
+ let MainThreadTimeline = class MainThreadTimeline {
10
+ constructor(context, logService, _timelineService) {
11
+ this.logService = logService;
12
+ this._timelineService = _timelineService;
13
+ this._providerEmitters = ( new Map());
14
+ this._proxy = ( context.getProxy(ExtHostContext.ExtHostTimeline));
15
+ }
16
+ $registerTimelineProvider(provider) {
17
+ this.logService.trace(`MainThreadTimeline#registerTimelineProvider: id=${provider.id}`);
18
+ const proxy = this._proxy;
19
+ const emitters = this._providerEmitters;
20
+ let onDidChange = emitters.get(provider.id);
21
+ if (onDidChange === undefined) {
22
+ onDidChange = ( new Emitter());
23
+ emitters.set(provider.id, onDidChange);
24
+ }
25
+ this._timelineService.registerTimelineProvider({
26
+ ...provider,
27
+ onDidChange: onDidChange.event,
28
+ async provideTimeline(uri, options, token) {
29
+ return revive(await proxy.$getTimeline(provider.id, uri, options, token));
30
+ },
31
+ dispose() {
32
+ emitters.delete(provider.id);
33
+ onDidChange?.dispose();
34
+ }
35
+ });
36
+ }
37
+ $unregisterTimelineProvider(id) {
38
+ this.logService.trace(`MainThreadTimeline#unregisterTimelineProvider: id=${id}`);
39
+ this._timelineService.unregisterTimelineProvider(id);
40
+ }
41
+ $emitTimelineChangeEvent(e) {
42
+ this.logService.trace(`MainThreadTimeline#emitChangeEvent: id=${e.id}, uri=${e.uri?.toString(true)}`);
43
+ const emitter = this._providerEmitters.get(e.id);
44
+ emitter?.fire(e);
45
+ }
46
+ dispose() {
47
+ }
48
+ };
49
+ MainThreadTimeline = __decorate([
50
+ extHostNamedCustomer(MainContext.MainThreadTimeline),
51
+ ( __param(1, ILogService)),
52
+ ( __param(2, ITimelineService))
53
+ ], MainThreadTimeline);
54
+
55
+ export { MainThreadTimeline };
@@ -0,0 +1,312 @@
1
+ import { __decorate, __param } from '../../../../../../external/tslib/tslib.es6.js';
2
+ import { Disposable, DisposableMap, DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
3
+ import { MainContext, ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
4
+ import { Extensions, NoTreeViewError, ResolvableTreeItem } from 'vscode/vscode/vs/workbench/common/views';
5
+ import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
6
+ import { distinct } from 'vscode/vscode/vs/base/common/arrays';
7
+ import { INotificationService } from 'vscode/vscode/vs/platform/notification/common/notification';
8
+ import { isUndefinedOrNull, isNumber } from 'vscode/vscode/vs/base/common/types';
9
+ import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
10
+ import { IExtensionService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
11
+ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
12
+ import { VSDataTransfer, createStringDataTransferItem } from 'vscode/vscode/vs/base/common/dataTransfer';
13
+ import { DataTransferFileCache } from '../common/shared/dataTransferCache.js';
14
+ import { DataTransfer } from 'vscode/vscode/vs/workbench/api/common/extHostTypeConverters';
15
+ import { IViewsService } from 'vscode/vscode/vs/workbench/services/views/common/viewsService';
16
+
17
+ let MainThreadTreeViews = class MainThreadTreeViews extends Disposable {
18
+ constructor(extHostContext, viewsService, notificationService, extensionService, logService) {
19
+ super();
20
+ this.viewsService = viewsService;
21
+ this.notificationService = notificationService;
22
+ this.extensionService = extensionService;
23
+ this.logService = logService;
24
+ this._dataProviders = this._register(( new DisposableMap()));
25
+ this._dndControllers = ( new Map());
26
+ this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostTreeViews));
27
+ }
28
+ async $registerTreeViewDataProvider(treeViewId, options) {
29
+ this.logService.trace('MainThreadTreeViews#$registerTreeViewDataProvider', treeViewId, options);
30
+ this.extensionService.whenInstalledExtensionsRegistered().then(() => {
31
+ const dataProvider = ( new TreeViewDataProvider(treeViewId, this._proxy, this.notificationService));
32
+ const disposables = ( new DisposableStore());
33
+ this._dataProviders.set(treeViewId, { dataProvider, dispose: () => disposables.dispose() });
34
+ const dndController = (options.hasHandleDrag || options.hasHandleDrop)
35
+ ? ( new TreeViewDragAndDropController(
36
+ treeViewId,
37
+ options.dropMimeTypes,
38
+ options.dragMimeTypes,
39
+ options.hasHandleDrag,
40
+ this._proxy
41
+ )) : undefined;
42
+ const viewer = this.getTreeView(treeViewId);
43
+ if (viewer) {
44
+ viewer.showCollapseAllAction = options.showCollapseAll;
45
+ viewer.canSelectMany = options.canSelectMany;
46
+ viewer.manuallyManageCheckboxes = options.manuallyManageCheckboxes;
47
+ viewer.dragAndDropController = dndController;
48
+ if (dndController) {
49
+ this._dndControllers.set(treeViewId, dndController);
50
+ }
51
+ viewer.dataProvider = dataProvider;
52
+ this.registerListeners(treeViewId, viewer, disposables);
53
+ this._proxy.$setVisible(treeViewId, viewer.visible);
54
+ }
55
+ else {
56
+ this.notificationService.error('No view is registered with id: ' + treeViewId);
57
+ }
58
+ });
59
+ }
60
+ $reveal(treeViewId, itemInfo, options) {
61
+ this.logService.trace('MainThreadTreeViews#$reveal', treeViewId, itemInfo?.item, itemInfo?.parentChain, options);
62
+ return this.viewsService.openView(treeViewId, options.focus)
63
+ .then(() => {
64
+ const viewer = this.getTreeView(treeViewId);
65
+ if (viewer && itemInfo) {
66
+ return this.reveal(viewer, this._dataProviders.get(treeViewId).dataProvider, itemInfo.item, itemInfo.parentChain, options);
67
+ }
68
+ return undefined;
69
+ });
70
+ }
71
+ $refresh(treeViewId, itemsToRefreshByHandle) {
72
+ this.logService.trace('MainThreadTreeViews#$refresh', treeViewId, itemsToRefreshByHandle);
73
+ const viewer = this.getTreeView(treeViewId);
74
+ const dataProvider = this._dataProviders.get(treeViewId);
75
+ if (viewer && dataProvider) {
76
+ const itemsToRefresh = dataProvider.dataProvider.getItemsToRefresh(itemsToRefreshByHandle);
77
+ return viewer.refresh(itemsToRefresh.length ? itemsToRefresh : undefined);
78
+ }
79
+ return Promise.resolve();
80
+ }
81
+ $setMessage(treeViewId, message) {
82
+ this.logService.trace('MainThreadTreeViews#$setMessage', treeViewId, ( message.toString()));
83
+ const viewer = this.getTreeView(treeViewId);
84
+ if (viewer) {
85
+ viewer.message = message;
86
+ }
87
+ }
88
+ $setTitle(treeViewId, title, description) {
89
+ this.logService.trace('MainThreadTreeViews#$setTitle', treeViewId, title, description);
90
+ const viewer = this.getTreeView(treeViewId);
91
+ if (viewer) {
92
+ viewer.title = title;
93
+ viewer.description = description;
94
+ }
95
+ }
96
+ $setBadge(treeViewId, badge) {
97
+ this.logService.trace('MainThreadTreeViews#$setBadge', treeViewId, badge?.value, badge?.tooltip);
98
+ const viewer = this.getTreeView(treeViewId);
99
+ if (viewer) {
100
+ viewer.badge = badge;
101
+ }
102
+ }
103
+ $resolveDropFileData(destinationViewId, requestId, dataItemId) {
104
+ const controller = this._dndControllers.get(destinationViewId);
105
+ if (!controller) {
106
+ throw new Error('Unknown tree');
107
+ }
108
+ return controller.resolveDropFileData(requestId, dataItemId);
109
+ }
110
+ async $disposeTree(treeViewId) {
111
+ const viewer = this.getTreeView(treeViewId);
112
+ if (viewer) {
113
+ viewer.dataProvider = undefined;
114
+ }
115
+ this._dataProviders.deleteAndDispose(treeViewId);
116
+ }
117
+ async reveal(treeView, dataProvider, itemIn, parentChain, options) {
118
+ options = options ? options : { select: false, focus: false };
119
+ const select = isUndefinedOrNull(options.select) ? false : options.select;
120
+ const focus = isUndefinedOrNull(options.focus) ? false : options.focus;
121
+ let expand = Math.min(isNumber(options.expand) ? options.expand : options.expand === true ? 1 : 0, 3);
122
+ if (dataProvider.isEmpty()) {
123
+ await treeView.refresh();
124
+ }
125
+ for (const parent of parentChain) {
126
+ const parentItem = dataProvider.getItem(parent.handle);
127
+ if (parentItem) {
128
+ await treeView.expand(parentItem);
129
+ }
130
+ }
131
+ const item = dataProvider.getItem(itemIn.handle);
132
+ if (item) {
133
+ await treeView.reveal(item);
134
+ if (select) {
135
+ treeView.setSelection([item]);
136
+ }
137
+ if (focus === false) {
138
+ treeView.setFocus();
139
+ }
140
+ else if (focus) {
141
+ treeView.setFocus(item);
142
+ }
143
+ let itemsToExpand = [item];
144
+ for (; itemsToExpand.length > 0 && expand > 0; expand--) {
145
+ await treeView.expand(itemsToExpand);
146
+ itemsToExpand = itemsToExpand.reduce((result, itemValue) => {
147
+ const item = dataProvider.getItem(itemValue.handle);
148
+ if (item && item.children && item.children.length) {
149
+ result.push(...item.children);
150
+ }
151
+ return result;
152
+ }, []);
153
+ }
154
+ }
155
+ }
156
+ registerListeners(treeViewId, treeView, disposables) {
157
+ disposables.add(treeView.onDidExpandItem(item => this._proxy.$setExpanded(treeViewId, item.handle, true)));
158
+ disposables.add(treeView.onDidCollapseItem(item => this._proxy.$setExpanded(treeViewId, item.handle, false)));
159
+ disposables.add(treeView.onDidChangeSelectionAndFocus(items => this._proxy.$setSelectionAndFocus(treeViewId, ( items.selection.map(({ handle }) => handle)), items.focus.handle)));
160
+ disposables.add(treeView.onDidChangeVisibility(isVisible => this._proxy.$setVisible(treeViewId, isVisible)));
161
+ disposables.add(treeView.onDidChangeCheckboxState(items => {
162
+ this._proxy.$changeCheckboxState(treeViewId, ( items.map(item => {
163
+ return { treeItemHandle: item.handle, newState: item.checkbox?.isChecked ?? false };
164
+ })));
165
+ }));
166
+ }
167
+ getTreeView(treeViewId) {
168
+ const viewDescriptor = ( Registry.as(Extensions.ViewsRegistry)).getView(treeViewId);
169
+ return viewDescriptor ? viewDescriptor.treeView : null;
170
+ }
171
+ dispose() {
172
+ for (const dataprovider of this._dataProviders) {
173
+ const treeView = this.getTreeView(dataprovider[0]);
174
+ if (treeView) {
175
+ treeView.dataProvider = undefined;
176
+ }
177
+ }
178
+ this._dataProviders.dispose();
179
+ this._dndControllers.clear();
180
+ super.dispose();
181
+ }
182
+ };
183
+ MainThreadTreeViews = __decorate([
184
+ extHostNamedCustomer(MainContext.MainThreadTreeViews),
185
+ ( __param(1, IViewsService)),
186
+ ( __param(2, INotificationService)),
187
+ ( __param(3, IExtensionService)),
188
+ ( __param(4, ILogService))
189
+ ], MainThreadTreeViews);
190
+ class TreeViewDragAndDropController {
191
+ constructor(treeViewId, dropMimeTypes, dragMimeTypes, hasWillDrop, _proxy) {
192
+ this.treeViewId = treeViewId;
193
+ this.dropMimeTypes = dropMimeTypes;
194
+ this.dragMimeTypes = dragMimeTypes;
195
+ this.hasWillDrop = hasWillDrop;
196
+ this._proxy = _proxy;
197
+ this.dataTransfersCache = ( new DataTransferFileCache());
198
+ }
199
+ async handleDrop(dataTransfer, targetTreeItem, token, operationUuid, sourceTreeId, sourceTreeItemHandles) {
200
+ const request = this.dataTransfersCache.add(dataTransfer);
201
+ try {
202
+ const dataTransferDto = await DataTransfer.from(dataTransfer);
203
+ if (token.isCancellationRequested) {
204
+ return;
205
+ }
206
+ return await this._proxy.$handleDrop(this.treeViewId, request.id, dataTransferDto, targetTreeItem?.handle, token, operationUuid, sourceTreeId, sourceTreeItemHandles);
207
+ }
208
+ finally {
209
+ request.dispose();
210
+ }
211
+ }
212
+ async handleDrag(sourceTreeItemHandles, operationUuid, token) {
213
+ if (!this.hasWillDrop) {
214
+ return;
215
+ }
216
+ const additionalDataTransferDTO = await this._proxy.$handleDrag(this.treeViewId, sourceTreeItemHandles, operationUuid, token);
217
+ if (!additionalDataTransferDTO) {
218
+ return;
219
+ }
220
+ const additionalDataTransfer = ( new VSDataTransfer());
221
+ additionalDataTransferDTO.items.forEach(([type, item]) => {
222
+ additionalDataTransfer.replace(type, createStringDataTransferItem(item.asString));
223
+ });
224
+ return additionalDataTransfer;
225
+ }
226
+ resolveDropFileData(requestId, dataItemId) {
227
+ return this.dataTransfersCache.resolveFileData(requestId, dataItemId);
228
+ }
229
+ }
230
+ class TreeViewDataProvider {
231
+ constructor(treeViewId, _proxy, notificationService) {
232
+ this.treeViewId = treeViewId;
233
+ this._proxy = _proxy;
234
+ this.notificationService = notificationService;
235
+ this.itemsMap = ( new Map());
236
+ this.hasResolve = this._proxy.$hasResolve(this.treeViewId);
237
+ }
238
+ getChildren(treeItem) {
239
+ if (!treeItem) {
240
+ this.itemsMap.clear();
241
+ }
242
+ return this._proxy.$getChildren(this.treeViewId, treeItem ? treeItem.handle : undefined)
243
+ .then(children => this.postGetChildren(children), err => {
244
+ if (!NoTreeViewError.is(err)) {
245
+ this.notificationService.error(err);
246
+ }
247
+ return [];
248
+ });
249
+ }
250
+ getItemsToRefresh(itemsToRefreshByHandle) {
251
+ const itemsToRefresh = [];
252
+ if (itemsToRefreshByHandle) {
253
+ for (const treeItemHandle of ( Object.keys(itemsToRefreshByHandle))) {
254
+ const currentTreeItem = this.getItem(treeItemHandle);
255
+ if (currentTreeItem) {
256
+ const treeItem = itemsToRefreshByHandle[treeItemHandle];
257
+ this.updateTreeItem(currentTreeItem, treeItem);
258
+ if (treeItemHandle === treeItem.handle) {
259
+ itemsToRefresh.push(currentTreeItem);
260
+ }
261
+ else {
262
+ this.itemsMap.delete(treeItemHandle);
263
+ this.itemsMap.set(currentTreeItem.handle, currentTreeItem);
264
+ const parent = treeItem.parentHandle ? this.itemsMap.get(treeItem.parentHandle) : null;
265
+ if (parent) {
266
+ itemsToRefresh.push(parent);
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ return itemsToRefresh;
273
+ }
274
+ getItem(treeItemHandle) {
275
+ return this.itemsMap.get(treeItemHandle);
276
+ }
277
+ isEmpty() {
278
+ return this.itemsMap.size === 0;
279
+ }
280
+ async postGetChildren(elements) {
281
+ if (elements === undefined) {
282
+ return undefined;
283
+ }
284
+ const result = [];
285
+ const hasResolve = await this.hasResolve;
286
+ if (elements) {
287
+ for (const element of elements) {
288
+ const resolvable = ( new ResolvableTreeItem(element, hasResolve ? (token) => {
289
+ return this._proxy.$resolve(this.treeViewId, element.handle, token);
290
+ } : undefined));
291
+ this.itemsMap.set(element.handle, resolvable);
292
+ result.push(resolvable);
293
+ }
294
+ }
295
+ return result;
296
+ }
297
+ updateTreeItem(current, treeItem) {
298
+ treeItem.children = treeItem.children ? treeItem.children : undefined;
299
+ if (current) {
300
+ const properties = distinct([...( Object.keys(current instanceof ResolvableTreeItem ? current.asTreeItem() : current)),
301
+ ...( Object.keys(treeItem))]);
302
+ for (const property of properties) {
303
+ current[property] = treeItem[property];
304
+ }
305
+ if (current instanceof ResolvableTreeItem) {
306
+ current.resetResolve();
307
+ }
308
+ }
309
+ }
310
+ }
311
+
312
+ export { MainThreadTreeViews };