@theia/task 1.45.1 → 1.46.0-next.72

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 (173) hide show
  1. package/README.md +193 -193
  2. package/lib/browser/index.d.ts +6 -6
  3. package/lib/browser/index.js +33 -33
  4. package/lib/browser/process/process-task-contribution.d.ts +6 -6
  5. package/lib/browser/process/process-task-contribution.js +43 -43
  6. package/lib/browser/process/process-task-frontend-module.d.ts +2 -2
  7. package/lib/browser/process/process-task-frontend-module.js +27 -27
  8. package/lib/browser/process/process-task-resolver.d.ts +17 -17
  9. package/lib/browser/process/process-task-resolver.js +101 -101
  10. package/lib/browser/provided-task-configurations.d.ts +43 -43
  11. package/lib/browser/provided-task-configurations.js +213 -213
  12. package/lib/browser/provided-task-configurations.spec.d.ts +1 -1
  13. package/lib/browser/provided-task-configurations.spec.js +43 -43
  14. package/lib/browser/quick-open-task.d.ts +144 -144
  15. package/lib/browser/quick-open-task.d.ts.map +1 -1
  16. package/lib/browser/quick-open-task.js +752 -748
  17. package/lib/browser/quick-open-task.js.map +1 -1
  18. package/lib/browser/task-configuration-manager.d.ts +64 -64
  19. package/lib/browser/task-configuration-manager.js +261 -261
  20. package/lib/browser/task-configuration-model.d.ts +32 -32
  21. package/lib/browser/task-configuration-model.js +79 -79
  22. package/lib/browser/task-configurations.d.ts +127 -127
  23. package/lib/browser/task-configurations.js +486 -486
  24. package/lib/browser/task-contribution.d.ts +182 -182
  25. package/lib/browser/task-contribution.js +206 -206
  26. package/lib/browser/task-definition-registry.d.ts +38 -38
  27. package/lib/browser/task-definition-registry.js +134 -134
  28. package/lib/browser/task-definition-registry.spec.d.ts +1 -1
  29. package/lib/browser/task-definition-registry.spec.js +170 -170
  30. package/lib/browser/task-frontend-contribution.d.ts +56 -56
  31. package/lib/browser/task-frontend-contribution.js +358 -358
  32. package/lib/browser/task-frontend-module.d.ts +5 -5
  33. package/lib/browser/task-frontend-module.js +79 -79
  34. package/lib/browser/task-name-resolver.d.ts +13 -13
  35. package/lib/browser/task-name-resolver.js +67 -67
  36. package/lib/browser/task-node.d.ts +9 -9
  37. package/lib/browser/task-node.js +17 -17
  38. package/lib/browser/task-preferences.d.ts +4 -4
  39. package/lib/browser/task-preferences.js +40 -40
  40. package/lib/browser/task-problem-matcher-registry.d.ts +40 -40
  41. package/lib/browser/task-problem-matcher-registry.js +309 -309
  42. package/lib/browser/task-problem-pattern-registry.d.ts +23 -23
  43. package/lib/browser/task-problem-pattern-registry.js +210 -210
  44. package/lib/browser/task-schema-updater.d.ts +58 -58
  45. package/lib/browser/task-schema-updater.js +688 -688
  46. package/lib/browser/task-service.d.ts +279 -279
  47. package/lib/browser/task-service.js +1119 -1119
  48. package/lib/browser/task-source-resolver.d.ts +9 -9
  49. package/lib/browser/task-source-resolver.js +51 -51
  50. package/lib/browser/task-templates.d.ts +13 -13
  51. package/lib/browser/task-templates.js +161 -161
  52. package/lib/browser/task-terminal-widget-manager.d.ts +44 -44
  53. package/lib/browser/task-terminal-widget-manager.js +228 -228
  54. package/lib/browser/tasks-monaco-contribution.d.ts +1 -1
  55. package/lib/browser/tasks-monaco-contribution.js +27 -27
  56. package/lib/common/index.d.ts +4 -4
  57. package/lib/common/index.js +31 -31
  58. package/lib/common/problem-matcher-protocol.d.ts +124 -124
  59. package/lib/common/problem-matcher-protocol.js +132 -132
  60. package/lib/common/process/task-protocol.d.ts +68 -68
  61. package/lib/common/process/task-protocol.js +33 -33
  62. package/lib/common/task-common-module.d.ts +7 -7
  63. package/lib/common/task-common-module.js +33 -33
  64. package/lib/common/task-protocol.d.ts +192 -192
  65. package/lib/common/task-protocol.js +137 -137
  66. package/lib/common/task-util.d.ts +22 -22
  67. package/lib/common/task-util.js +46 -46
  68. package/lib/common/task-watcher.d.ts +17 -17
  69. package/lib/common/task-watcher.js +86 -86
  70. package/lib/node/custom/custom-task-runner-backend-module.d.ts +2 -2
  71. package/lib/node/custom/custom-task-runner-backend-module.js +36 -36
  72. package/lib/node/custom/custom-task-runner-contribution.d.ts +6 -6
  73. package/lib/node/custom/custom-task-runner-contribution.js +42 -42
  74. package/lib/node/custom/custom-task-runner.d.ts +15 -15
  75. package/lib/node/custom/custom-task-runner.js +69 -69
  76. package/lib/node/custom/custom-task.d.ts +20 -20
  77. package/lib/node/custom/custom-task.js +78 -78
  78. package/lib/node/index.d.ts +3 -3
  79. package/lib/node/index.js +30 -30
  80. package/lib/node/process/process-task-runner-backend-module.d.ts +2 -2
  81. package/lib/node/process/process-task-runner-backend-module.js +36 -36
  82. package/lib/node/process/process-task-runner-contribution.d.ts +6 -6
  83. package/lib/node/process/process-task-runner-contribution.js +43 -43
  84. package/lib/node/process/process-task-runner.d.ts +60 -60
  85. package/lib/node/process/process-task-runner.js +355 -355
  86. package/lib/node/process/process-task.d.ts +26 -26
  87. package/lib/node/process/process-task.js +135 -135
  88. package/lib/node/process/process-task.spec.d.ts +1 -1
  89. package/lib/node/process/process-task.spec.js +29 -29
  90. package/lib/node/task-abstract-line-matcher.d.ts +49 -49
  91. package/lib/node/task-abstract-line-matcher.js +273 -273
  92. package/lib/node/task-backend-application-contribution.d.ts +8 -8
  93. package/lib/node/task-backend-application-contribution.js +48 -48
  94. package/lib/node/task-backend-module.d.ts +3 -3
  95. package/lib/node/task-backend-module.js +50 -50
  96. package/lib/node/task-line-matchers.d.ts +27 -27
  97. package/lib/node/task-line-matchers.js +121 -121
  98. package/lib/node/task-manager.d.ts +55 -55
  99. package/lib/node/task-manager.js +135 -135
  100. package/lib/node/task-problem-collector.d.ts +10 -10
  101. package/lib/node/task-problem-collector.js +57 -57
  102. package/lib/node/task-problem-collector.spec.d.ts +1 -1
  103. package/lib/node/task-problem-collector.spec.js +310 -310
  104. package/lib/node/task-runner-protocol.d.ts +16 -16
  105. package/lib/node/task-runner-protocol.js +19 -19
  106. package/lib/node/task-runner.d.ts +50 -50
  107. package/lib/node/task-runner.js +97 -97
  108. package/lib/node/task-server.d.ts +39 -39
  109. package/lib/node/task-server.js +237 -237
  110. package/lib/node/task-server.slow-spec.d.ts +1 -1
  111. package/lib/node/task-server.slow-spec.js +395 -395
  112. package/lib/node/task.d.ts +50 -50
  113. package/lib/node/task.js +77 -77
  114. package/lib/node/test/task-test-container.d.ts +2 -2
  115. package/lib/node/test/task-test-container.js +58 -58
  116. package/package.json +14 -14
  117. package/src/browser/index.ts +22 -22
  118. package/src/browser/process/process-task-contribution.ts +31 -31
  119. package/src/browser/process/process-task-frontend-module.ts +27 -27
  120. package/src/browser/process/process-task-resolver.ts +89 -89
  121. package/src/browser/provided-task-configurations.spec.ts +46 -46
  122. package/src/browser/provided-task-configurations.ts +213 -213
  123. package/src/browser/quick-open-task.ts +831 -827
  124. package/src/browser/style/index.css +19 -19
  125. package/src/browser/task-configuration-manager.ts +256 -256
  126. package/src/browser/task-configuration-model.ts +101 -101
  127. package/src/browser/task-configurations.ts +508 -508
  128. package/src/browser/task-contribution.ts +266 -266
  129. package/src/browser/task-definition-registry.spec.ts +203 -203
  130. package/src/browser/task-definition-registry.ts +131 -131
  131. package/src/browser/task-frontend-contribution.ts +402 -402
  132. package/src/browser/task-frontend-module.ts +86 -86
  133. package/src/browser/task-name-resolver.ts +55 -55
  134. package/src/browser/task-node.ts +37 -37
  135. package/src/browser/task-preferences.ts +40 -40
  136. package/src/browser/task-problem-matcher-registry.ts +308 -308
  137. package/src/browser/task-problem-pattern-registry.ts +196 -196
  138. package/src/browser/task-schema-updater.ts +701 -701
  139. package/src/browser/task-service.ts +1164 -1164
  140. package/src/browser/task-source-resolver.ts +36 -36
  141. package/src/browser/task-templates.ts +168 -168
  142. package/src/browser/task-terminal-widget-manager.ts +224 -224
  143. package/src/browser/tasks-monaco-contribution.ts +27 -27
  144. package/src/common/index.ts +20 -20
  145. package/src/common/problem-matcher-protocol.ts +234 -234
  146. package/src/common/process/task-protocol.ts +97 -97
  147. package/src/common/task-common-module.ts +34 -34
  148. package/src/common/task-protocol.ts +317 -317
  149. package/src/common/task-util.ts +43 -43
  150. package/src/common/task-watcher.ts +78 -78
  151. package/src/node/custom/custom-task-runner-backend-module.ts +37 -37
  152. package/src/node/custom/custom-task-runner-contribution.ts +30 -30
  153. package/src/node/custom/custom-task-runner.ts +60 -60
  154. package/src/node/custom/custom-task.ts +73 -73
  155. package/src/node/index.ts +19 -19
  156. package/src/node/process/process-task-runner-backend-module.ts +37 -37
  157. package/src/node/process/process-task-runner-contribution.ts +31 -31
  158. package/src/node/process/process-task-runner.ts +371 -371
  159. package/src/node/process/process-task.spec.ts +30 -30
  160. package/src/node/process/process-task.ts +144 -144
  161. package/src/node/task-abstract-line-matcher.ts +312 -312
  162. package/src/node/task-backend-application-contribution.ts +36 -36
  163. package/src/node/task-backend-module.ts +57 -57
  164. package/src/node/task-line-matchers.ts +127 -127
  165. package/src/node/task-manager.ts +129 -129
  166. package/src/node/task-problem-collector.spec.ts +338 -338
  167. package/src/node/task-problem-collector.ts +62 -62
  168. package/src/node/task-runner-protocol.ts +33 -33
  169. package/src/node/task-runner.ts +96 -96
  170. package/src/node/task-server.slow-spec.ts +444 -444
  171. package/src/node/task-server.ts +263 -263
  172. package/src/node/task.ts +103 -103
  173. package/src/node/test/task-test-container.ts +63 -63
@@ -1,749 +1,753 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2017 Ericsson 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
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
- return c > 3 && r && Object.defineProperty(target, key, r), r;
22
- };
23
- var __metadata = (this && this.__metadata) || function (k, v) {
24
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
- };
26
- var QuickOpenTask_1;
27
- Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.TaskRestartRunningQuickOpen = exports.RunningTaskQuickOpenItem = exports.TaskRunningQuickOpen = exports.TaskTerminateQuickOpen = exports.TaskConfigureQuickOpenItem = exports.ConfigureBuildOrTestTaskQuickOpenItem = exports.TaskRunQuickOpenItem = exports.QuickOpenTask = exports.SHOW_ALL = exports.NO_TASK_TO_RUN = exports.CONFIGURE_A_TASK = exports.CHOOSE_TASK = exports.TaskEntry = exports.ConfigureTaskAction = void 0;
29
- const inversify_1 = require("@theia/core/shared/inversify");
30
- const task_service_1 = require("./task-service");
31
- const task_protocol_1 = require("../common/task-protocol");
32
- const task_definition_registry_1 = require("./task-definition-registry");
33
- const uri_1 = require("@theia/core/lib/common/uri");
34
- const browser_1 = require("@theia/core/lib/browser");
35
- const browser_2 = require("@theia/workspace/lib/browser");
36
- const terminal_service_1 = require("@theia/terminal/lib/browser/base/terminal-service");
37
- const provided_task_configurations_1 = require("./provided-task-configurations");
38
- const task_name_resolver_1 = require("./task-name-resolver");
39
- const task_source_resolver_1 = require("./task-source-resolver");
40
- const task_configuration_manager_1 = require("./task-configuration-manager");
41
- const quick_input_service_1 = require("@theia/core/lib/browser/quick-input/quick-input-service");
42
- const nls_1 = require("@theia/core/lib/common/nls");
43
- const pickerQuickAccess_1 = require("@theia/monaco-editor-core/esm/vs/platform/quickinput/browser/pickerQuickAccess");
44
- var ConfigureTaskAction;
45
- (function (ConfigureTaskAction) {
46
- ConfigureTaskAction.ID = 'workbench.action.tasks.configureTaskRunner';
47
- ConfigureTaskAction.TEXT = 'Configure Task';
48
- })(ConfigureTaskAction = exports.ConfigureTaskAction || (exports.ConfigureTaskAction = {}));
49
- var TaskEntry;
50
- (function (TaskEntry) {
51
- function isQuickPickValue(item) {
52
- return 'value' in item && typeof item.value === 'string';
53
- }
54
- TaskEntry.isQuickPickValue = isQuickPickValue;
55
- })(TaskEntry = exports.TaskEntry || (exports.TaskEntry = {}));
56
- exports.CHOOSE_TASK = nls_1.nls.localizeByDefault('Select the task to run');
57
- exports.CONFIGURE_A_TASK = nls_1.nls.localizeByDefault('Configure a Task');
58
- exports.NO_TASK_TO_RUN = nls_1.nls.localize('theia/task/noTaskToRun', 'No task to run found. Configure Tasks...');
59
- exports.SHOW_ALL = nls_1.nls.localizeByDefault('Show All Tasks...');
60
- let QuickOpenTask = QuickOpenTask_1 = class QuickOpenTask {
61
- constructor() {
62
- this.description = 'Run Task';
63
- this.items = [];
64
- }
65
- init() {
66
- return this.doInit(this.taskService.startUserAction());
67
- }
68
- async doInit(token) {
69
- const recentTasks = this.taskService.recentTasks;
70
- const configuredTasks = await this.taskService.getConfiguredTasks(token);
71
- const providedTypes = this.taskDefinitionRegistry.getAll();
72
- const { filteredRecentTasks, filteredConfiguredTasks } = this.getFilteredTasks(recentTasks, configuredTasks, []);
73
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
74
- this.items = [];
75
- const filteredRecentTasksItems = this.getItems(filteredRecentTasks, 'recently used tasks', token, isMulti);
76
- const filteredConfiguredTasksItems = this.getItems(filteredConfiguredTasks, 'configured tasks', token, isMulti, {
77
- label: `$(plus) ${exports.CONFIGURE_A_TASK}`,
78
- execute: () => this.configure()
79
- });
80
- const providedTypeItems = this.createProvidedTypeItems(providedTypes);
81
- this.items.push(...filteredRecentTasksItems, ...filteredConfiguredTasksItems, ...providedTypeItems);
82
- if (!this.items.length) {
83
- this.items.push(({
84
- label: exports.NO_TASK_TO_RUN,
85
- execute: () => this.configure()
86
- }));
87
- }
88
- }
89
- createProvidedTypeItems(providedTypes) {
90
- const result = [];
91
- result.push({ type: 'separator', label: nls_1.nls.localizeByDefault('contributed') });
92
- providedTypes.sort((t1, t2) => t1.taskType.localeCompare(t2.taskType));
93
- for (const definition of providedTypes) {
94
- const type = definition.taskType;
95
- result.push(this.toProvidedTaskTypeEntry(type, `$(folder) ${type}`));
96
- }
97
- result.push(this.toProvidedTaskTypeEntry(exports.SHOW_ALL, exports.SHOW_ALL));
98
- return result;
99
- }
100
- toProvidedTaskTypeEntry(type, label) {
101
- return {
102
- label,
103
- value: type,
104
- /**
105
- * This function is used in the context of a QuickAccessProvider (triggered from the command palette: '?task').
106
- * It triggers a call to QuickOpenTask#getPicks,
107
- * the 'execute' function below is called when the user selects an entry for a task type which triggers the display of
108
- * the second level quick pick.
109
- *
110
- * Due to the asynchronous resolution of second-level tasks, there may be a delay in showing the quick input widget.
111
- *
112
- * NOTE: The widget is not delayed in other contexts e.g. by commands (Run Tasks), see the implementation at QuickOpenTask#open
113
- *
114
- * To improve the performance, we may consider using a `PickerQuickAccessProvider` instead of a `QuickAccessProvider`,
115
- * and support providing 'FastAndSlowPicks'.
116
- *
117
- * TODO: Consider the introduction and exposure of monaco `PickerQuickAccessProvider` and the corresponding refactoring for this and other
118
- * users of QuickAccessProvider.
119
- */
120
- execute: () => {
121
- this.doSecondLevel(type);
122
- }
123
- };
124
- }
125
- onDidTriggerGearIcon(item) {
126
- if (item instanceof TaskRunQuickOpenItem) {
127
- this.taskService.configure(item.token, item.task);
128
- this.quickInputService.hide();
129
- }
130
- }
131
- async open() {
132
- this.showMultiLevelQuickPick();
133
- }
134
- async showMultiLevelQuickPick(skipInit) {
135
- if (!skipInit) {
136
- await this.init();
137
- }
138
- const picker = this.quickInputService.createQuickPick();
139
- picker.placeholder = exports.CHOOSE_TASK;
140
- picker.matchOnDescription = true;
141
- picker.ignoreFocusOut = false;
142
- picker.items = this.items;
143
- const firstLevelTask = await this.doPickerFirstLevel(picker);
144
- if (!!firstLevelTask && TaskEntry.isQuickPickValue(firstLevelTask)) {
145
- // A taskType was selected
146
- picker.busy = true;
147
- await this.doSecondLevel(firstLevelTask.value);
148
- }
149
- else if (!!firstLevelTask && 'execute' in firstLevelTask && typeof firstLevelTask.execute === 'function') {
150
- firstLevelTask.execute();
151
- }
152
- picker.dispose();
153
- }
154
- async doPickerFirstLevel(picker) {
155
- picker.show();
156
- const firstLevelPickerResult = await new Promise(resolve => {
157
- picker.onDidAccept(async () => {
158
- resolve(picker.selectedItems ? picker.selectedItems[0] : undefined);
159
- });
160
- });
161
- return firstLevelPickerResult !== null && firstLevelPickerResult !== void 0 ? firstLevelPickerResult : undefined;
162
- }
163
- async doSecondLevel(taskType) {
164
- var _a;
165
- // Resolve Second level tasks based on selected TaskType
166
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
167
- const token = this.taskService.startUserAction();
168
- const providedTasks = taskType === exports.SHOW_ALL ?
169
- await this.taskService.getProvidedTasks(token, provided_task_configurations_1.ALL_TASK_TYPES) :
170
- await this.taskService.getProvidedTasks(token, taskType);
171
- const providedTasksItems = this.getItems(providedTasks, taskType + ' tasks', token, isMulti);
172
- const label = providedTasksItems.length ?
173
- nls_1.nls.localizeByDefault('Go back ↩') :
174
- nls_1.nls.localizeByDefault('No {0} tasks found. Go back ↩', taskType);
175
- providedTasksItems.push(({
176
- label,
177
- execute: () => this.showMultiLevelQuickPick(true)
178
- }));
179
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(providedTasksItems, { placeholder: exports.CHOOSE_TASK });
180
- }
181
- attach() {
182
- this.items = [];
183
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
184
- this.taskService.getRunningTasks().then(tasks => {
185
- var _a;
186
- if (!tasks.length) {
187
- this.items.push({
188
- label: 'No tasks found',
189
- });
190
- }
191
- else {
192
- tasks.forEach((task) => {
193
- // can only attach to terminal processes, so only list those
194
- if (task.terminalId) {
195
- this.items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.attach(task.terminalId, task)));
196
- }
197
- });
198
- }
199
- if (this.items.length === 0) {
200
- this.items.push(({
201
- label: 'No tasks found'
202
- }));
203
- }
204
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, { placeholder: exports.CHOOSE_TASK });
205
- });
206
- }
207
- async configure() {
208
- var _a;
209
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.pick(this.resolveItemsToConfigure(), { placeHolder: nls_1.nls.localizeByDefault('Select a task to configure') }).then(async (item) => {
210
- if (item && 'execute' in item && typeof item.execute === 'function') {
211
- item.execute();
212
- }
213
- });
214
- }
215
- async resolveItemsToConfigure() {
216
- const items = [];
217
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
218
- const token = this.taskService.startUserAction();
219
- const configuredTasks = await this.taskService.getConfiguredTasks(token);
220
- const providedTasks = await this.taskService.getProvidedTasks(token, provided_task_configurations_1.ALL_TASK_TYPES);
221
- // check if tasks.json exists. If not, display "Create tasks.json file from template"
222
- // If tasks.json exists and empty, display 'Open tasks.json file'
223
- const { filteredConfiguredTasks, filteredProvidedTasks } = this.getFilteredTasks([], configuredTasks, providedTasks);
224
- const groupedTasks = this.getGroupedTasksByWorkspaceFolder([...filteredConfiguredTasks, ...filteredProvidedTasks]);
225
- if (groupedTasks.has(task_protocol_1.TaskScope.Global.toString())) {
226
- const configs = groupedTasks.get(task_protocol_1.TaskScope.Global.toString());
227
- this.addConfigurationItems(items, configs, token, isMulti);
228
- }
229
- if (groupedTasks.has(task_protocol_1.TaskScope.Workspace.toString())) {
230
- const configs = groupedTasks.get(task_protocol_1.TaskScope.Workspace.toString());
231
- this.addConfigurationItems(items, configs, token, isMulti);
232
- }
233
- const rootUris = (await this.workspaceService.roots).map(rootStat => rootStat.resource.toString());
234
- for (const rootFolder of rootUris) {
235
- const folderName = new uri_1.default(rootFolder).displayName;
236
- if (groupedTasks.has(rootFolder)) {
237
- const configs = groupedTasks.get(rootFolder.toString());
238
- this.addConfigurationItems(items, configs, token, isMulti);
239
- }
240
- else {
241
- const { configUri } = this.preferences.resolve('tasks', [], rootFolder);
242
- const existTaskConfigFile = !!configUri;
243
- items.push(({
244
- label: existTaskConfigFile ? 'Open tasks.json file' : 'Create tasks.json file from template',
245
- execute: () => {
246
- setTimeout(() => this.taskConfigurationManager.openConfiguration(rootFolder));
247
- }
248
- }));
249
- }
250
- if (items.length > 0) {
251
- items.unshift({
252
- type: 'separator',
253
- label: isMulti ? folderName : ''
254
- });
255
- }
256
- }
257
- if (items.length === 0) {
258
- items.push(({
259
- label: 'No tasks found'
260
- }));
261
- }
262
- return items;
263
- }
264
- addConfigurationItems(items, configs, token, isMulti) {
265
- items.push(...configs.map(taskConfig => {
266
- const item = new TaskConfigureQuickOpenItem(token, taskConfig, this.taskService, this.taskNameResolver, this.workspaceService, isMulti);
267
- item['taskDefinitionRegistry'] = this.taskDefinitionRegistry;
268
- return item;
269
- }).sort((t1, t2) => t1.label.localeCompare(t2.label)));
270
- }
271
- getTaskItems() {
272
- return this.items.filter((item) => item.type !== 'separator' && item.task !== undefined);
273
- }
274
- async runBuildOrTestTask(buildOrTestType) {
275
- var _a;
276
- const shouldRunBuildTask = buildOrTestType === 'build';
277
- const token = this.taskService.startUserAction();
278
- await this.doInit(token);
279
- const taskItems = this.getTaskItems();
280
- if (taskItems.length > 0) { // the item in `this.items` is not 'No tasks found'
281
- const buildOrTestTasks = taskItems.filter((t) => shouldRunBuildTask ? task_protocol_1.TaskCustomization.isBuildTask(t.task) : task_protocol_1.TaskCustomization.isTestTask(t.task));
282
- if (buildOrTestTasks.length > 0) { // build / test tasks are defined in the workspace
283
- const defaultBuildOrTestTasks = buildOrTestTasks.filter((t) => shouldRunBuildTask ? task_protocol_1.TaskCustomization.isDefaultBuildTask(t.task) : task_protocol_1.TaskCustomization.isDefaultTestTask(t.task));
284
- if (defaultBuildOrTestTasks.length === 1) { // run the default build / test task
285
- const defaultBuildOrTestTask = defaultBuildOrTestTasks[0];
286
- const taskToRun = defaultBuildOrTestTask.task;
287
- const scope = taskToRun._scope;
288
- if (this.taskDefinitionRegistry && !!this.taskDefinitionRegistry.getDefinition(taskToRun)) {
289
- this.taskService.run(token, taskToRun.source, taskToRun.label, scope);
290
- }
291
- else {
292
- this.taskService.run(token, taskToRun._source, taskToRun.label, scope);
293
- }
294
- return;
295
- }
296
- // if default build / test task is not found, or there are more than one default,
297
- // display the list of build /test tasks to let the user decide which to run
298
- this.items = buildOrTestTasks;
299
- }
300
- else { // no build / test tasks, display an action item to configure the build / test task
301
- this.items = [({
302
- label: `No ${buildOrTestType} task to run found. Configure ${buildOrTestType.charAt(0).toUpperCase() + buildOrTestType.slice(1)} Task...`,
303
- execute: () => {
304
- this.doInit(token).then(() => {
305
- var _a;
306
- // update the `tasks.json` file, instead of running the task itself
307
- this.items = this.getTaskItems().map((item) => new ConfigureBuildOrTestTaskQuickOpenItem(token, item.task, this.taskService, this.workspaceService.isMultiRootWorkspaceOpened, this.taskNameResolver, shouldRunBuildTask, this.taskConfigurationManager, this.taskDefinitionRegistry, this.taskSourceResolver));
308
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, { placeholder: `Select the task to be used as the default ${buildOrTestType} task` });
309
- });
310
- }
311
- })];
312
- }
313
- }
314
- else { // no tasks are currently present, prompt users if they'd like to configure a task.
315
- this.items = [{
316
- label: `No ${buildOrTestType} task to run found. Configure ${buildOrTestType.charAt(0).toUpperCase() + buildOrTestType.slice(1)} Task...`,
317
- execute: () => this.configure()
318
- }];
319
- }
320
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, {
321
- placeholder: `Select the ${buildOrTestType} task to run`,
322
- onDidTriggerItemButton: ({ item }) => this.onDidTriggerGearIcon(item)
323
- });
324
- }
325
- async getPicks(filter, token) {
326
- await this.init();
327
- return (0, quick_input_service_1.filterItems)(this.items, filter);
328
- }
329
- registerQuickAccessProvider() {
330
- this.quickAccessRegistry.registerQuickAccessProvider({
331
- getInstance: () => this,
332
- prefix: QuickOpenTask_1.PREFIX,
333
- placeholder: 'Select the task to run',
334
- helpEntries: [{ description: 'Run Task', needsEditor: false }]
335
- });
336
- }
337
- getRunningTaskLabel(task) {
338
- return `Task id: ${task.taskId}, label: ${task.config.label}`;
339
- }
340
- getItems(tasks, groupLabel, token, isMulti, defaultTask) {
341
- const items = tasks.map(task => new TaskRunQuickOpenItem(token, task, this.taskService, isMulti, this.taskDefinitionRegistry, this.taskNameResolver, this.taskSourceResolver, this.taskConfigurationManager, [{
342
- iconClass: 'codicon-gear',
343
- tooltip: 'Configure Task',
344
- }])).sort((t1, t2) => {
345
- var _a, _b;
346
- let result = ((_a = t1.description) !== null && _a !== void 0 ? _a : '').localeCompare((_b = t2.description) !== null && _b !== void 0 ? _b : '');
347
- if (result === 0) {
348
- result = t1.label.localeCompare(t2.label);
349
- }
350
- return result;
351
- });
352
- if (items.length === 0 && defaultTask) {
353
- items.push(defaultTask);
354
- }
355
- if (items.length > 0) {
356
- items.unshift({ type: 'separator', label: groupLabel });
357
- }
358
- return items;
359
- }
360
- getFilteredTasks(recentTasks, configuredTasks, providedTasks) {
361
- const filteredRecentTasks = [];
362
- recentTasks.forEach(recent => {
363
- const originalTaskConfig = [...configuredTasks, ...providedTasks].find(t => this.taskDefinitionRegistry.compareTasks(recent, t));
364
- if (originalTaskConfig) {
365
- filteredRecentTasks.push(originalTaskConfig);
366
- }
367
- });
368
- const filteredProvidedTasks = [];
369
- providedTasks.forEach(provided => {
370
- const exist = [...filteredRecentTasks, ...configuredTasks].some(t => this.taskDefinitionRegistry.compareTasks(provided, t));
371
- if (!exist) {
372
- filteredProvidedTasks.push(provided);
373
- }
374
- });
375
- const filteredConfiguredTasks = [];
376
- configuredTasks.forEach(configured => {
377
- const exist = filteredRecentTasks.some(t => this.taskDefinitionRegistry.compareTasks(configured, t));
378
- if (!exist) {
379
- filteredConfiguredTasks.push(configured);
380
- }
381
- });
382
- return {
383
- filteredRecentTasks, filteredConfiguredTasks, filteredProvidedTasks
384
- };
385
- }
386
- getGroupedTasksByWorkspaceFolder(tasks) {
387
- const grouped = new Map();
388
- for (const task of tasks) {
389
- const scope = task._scope;
390
- if (grouped.has(scope.toString())) {
391
- grouped.get(scope.toString()).push(task);
392
- }
393
- else {
394
- grouped.set(scope.toString(), [task]);
395
- }
396
- }
397
- for (const taskConfigs of grouped.values()) {
398
- taskConfigs.sort((t1, t2) => t1.label.localeCompare(t2.label));
399
- }
400
- return grouped;
401
- }
402
- };
403
- QuickOpenTask.PREFIX = 'task ';
404
- __decorate([
405
- (0, inversify_1.inject)(task_service_1.TaskService),
406
- __metadata("design:type", task_service_1.TaskService)
407
- ], QuickOpenTask.prototype, "taskService", void 0);
408
- __decorate([
409
- (0, inversify_1.inject)(browser_1.QuickInputService),
410
- (0, inversify_1.optional)(),
411
- __metadata("design:type", Object)
412
- ], QuickOpenTask.prototype, "quickInputService", void 0);
413
- __decorate([
414
- (0, inversify_1.inject)(browser_1.QuickAccessRegistry),
415
- __metadata("design:type", Object)
416
- ], QuickOpenTask.prototype, "quickAccessRegistry", void 0);
417
- __decorate([
418
- (0, inversify_1.inject)(browser_2.WorkspaceService),
419
- __metadata("design:type", browser_2.WorkspaceService)
420
- ], QuickOpenTask.prototype, "workspaceService", void 0);
421
- __decorate([
422
- (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
423
- __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
424
- ], QuickOpenTask.prototype, "taskDefinitionRegistry", void 0);
425
- __decorate([
426
- (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
427
- __metadata("design:type", task_name_resolver_1.TaskNameResolver)
428
- ], QuickOpenTask.prototype, "taskNameResolver", void 0);
429
- __decorate([
430
- (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
431
- __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
432
- ], QuickOpenTask.prototype, "taskSourceResolver", void 0);
433
- __decorate([
434
- (0, inversify_1.inject)(task_configuration_manager_1.TaskConfigurationManager),
435
- __metadata("design:type", task_configuration_manager_1.TaskConfigurationManager)
436
- ], QuickOpenTask.prototype, "taskConfigurationManager", void 0);
437
- __decorate([
438
- (0, inversify_1.inject)(browser_1.PreferenceService),
439
- __metadata("design:type", Object)
440
- ], QuickOpenTask.prototype, "preferences", void 0);
441
- __decorate([
442
- (0, inversify_1.inject)(browser_1.LabelProvider),
443
- __metadata("design:type", browser_1.LabelProvider)
444
- ], QuickOpenTask.prototype, "labelProvider", void 0);
445
- QuickOpenTask = QuickOpenTask_1 = __decorate([
446
- (0, inversify_1.injectable)()
447
- ], QuickOpenTask);
448
- exports.QuickOpenTask = QuickOpenTask;
449
- class TaskRunQuickOpenItem {
450
- constructor(token, task, taskService, isMulti, taskDefinitionRegistry, taskNameResolver, taskSourceResolver, taskConfigurationManager, buttons) {
451
- this.token = token;
452
- this.task = task;
453
- this.taskService = taskService;
454
- this.isMulti = isMulti;
455
- this.taskDefinitionRegistry = taskDefinitionRegistry;
456
- this.taskNameResolver = taskNameResolver;
457
- this.taskSourceResolver = taskSourceResolver;
458
- this.taskConfigurationManager = taskConfigurationManager;
459
- this.buttons = buttons;
460
- }
461
- get label() {
462
- return this.taskNameResolver.resolve(this.task);
463
- }
464
- get description() {
465
- return renderScope(this.task._scope, this.isMulti);
466
- }
467
- get detail() {
468
- return this.task.detail;
469
- }
470
- execute() {
471
- const scope = this.task._scope;
472
- if (this.taskDefinitionRegistry && !!this.taskDefinitionRegistry.getDefinition(this.task)) {
473
- this.taskService.run(this.token, this.task.source || this.task._source, this.task.label, scope);
474
- }
475
- else {
476
- this.taskService.run(this.token, this.task._source, this.task.label, scope);
477
- }
478
- }
479
- trigger() {
480
- this.taskService.configure(this.token, this.task);
481
- return pickerQuickAccess_1.TriggerAction.CLOSE_PICKER;
482
- }
483
- }
484
- exports.TaskRunQuickOpenItem = TaskRunQuickOpenItem;
485
- class ConfigureBuildOrTestTaskQuickOpenItem extends TaskRunQuickOpenItem {
486
- constructor(token, task, taskService, isMulti, taskNameResolver, isBuildTask, taskConfigurationManager, taskDefinitionRegistry, taskSourceResolver) {
487
- super(token, task, taskService, isMulti, taskDefinitionRegistry, taskNameResolver, taskSourceResolver, taskConfigurationManager);
488
- this.isBuildTask = isBuildTask;
489
- }
490
- execute() {
491
- this.taskService.updateTaskConfiguration(this.token, this.task, { group: { kind: this.isBuildTask ? 'build' : 'test', isDefault: true } })
492
- .then(() => {
493
- if (this.task._scope) {
494
- this.taskConfigurationManager.openConfiguration(this.task._scope);
495
- }
496
- });
497
- }
498
- }
499
- exports.ConfigureBuildOrTestTaskQuickOpenItem = ConfigureBuildOrTestTaskQuickOpenItem;
500
- function renderScope(scope, isMulti) {
501
- if (typeof scope === 'string') {
502
- if (isMulti) {
503
- return new uri_1.default(scope).displayName;
504
- }
505
- else {
506
- return '';
507
- }
508
- }
509
- else {
510
- return task_protocol_1.TaskScope[scope];
511
- }
512
- }
513
- class TaskConfigureQuickOpenItem {
514
- constructor(token, task, taskService, taskNameResolver, workspaceService, isMulti) {
515
- this.token = token;
516
- this.task = task;
517
- this.taskService = taskService;
518
- this.taskNameResolver = taskNameResolver;
519
- this.workspaceService = workspaceService;
520
- this.isMulti = isMulti;
521
- const stat = this.workspaceService.workspace;
522
- this.isMulti = stat ? !stat.isDirectory : false;
523
- }
524
- get label() {
525
- return this.taskNameResolver.resolve(this.task);
526
- }
527
- get description() {
528
- return renderScope(this.task._scope, this.isMulti);
529
- }
530
- accept() {
531
- this.execute();
532
- }
533
- execute() {
534
- this.taskService.configure(this.token, this.task);
535
- }
536
- }
537
- exports.TaskConfigureQuickOpenItem = TaskConfigureQuickOpenItem;
538
- let TaskTerminateQuickOpen = class TaskTerminateQuickOpen {
539
- async getItems() {
540
- const items = [];
541
- const runningTasks = await this.taskService.getRunningTasks();
542
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
543
- if (runningTasks.length <= 0) {
544
- items.push(({
545
- label: 'No task is currently running',
546
- }));
547
- }
548
- else {
549
- runningTasks.forEach((task) => {
550
- items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.kill(task.taskId)));
551
- });
552
- if (runningTasks.length > 1) {
553
- items.push(({
554
- label: 'All running tasks',
555
- execute: () => {
556
- runningTasks.forEach((t) => {
557
- this.taskService.kill(t.taskId);
558
- });
559
- }
560
- }));
561
- }
562
- }
563
- return items;
564
- }
565
- async open() {
566
- var _a;
567
- const items = await this.getItems();
568
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select task to terminate' });
569
- }
570
- };
571
- __decorate([
572
- (0, inversify_1.inject)(browser_1.LabelProvider),
573
- __metadata("design:type", browser_1.LabelProvider)
574
- ], TaskTerminateQuickOpen.prototype, "labelProvider", void 0);
575
- __decorate([
576
- (0, inversify_1.inject)(browser_1.QuickInputService),
577
- (0, inversify_1.optional)(),
578
- __metadata("design:type", Object)
579
- ], TaskTerminateQuickOpen.prototype, "quickInputService", void 0);
580
- __decorate([
581
- (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
582
- __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
583
- ], TaskTerminateQuickOpen.prototype, "taskDefinitionRegistry", void 0);
584
- __decorate([
585
- (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
586
- __metadata("design:type", task_name_resolver_1.TaskNameResolver)
587
- ], TaskTerminateQuickOpen.prototype, "taskNameResolver", void 0);
588
- __decorate([
589
- (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
590
- __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
591
- ], TaskTerminateQuickOpen.prototype, "taskSourceResolver", void 0);
592
- __decorate([
593
- (0, inversify_1.inject)(task_service_1.TaskService),
594
- __metadata("design:type", task_service_1.TaskService)
595
- ], TaskTerminateQuickOpen.prototype, "taskService", void 0);
596
- __decorate([
597
- (0, inversify_1.inject)(browser_2.WorkspaceService),
598
- __metadata("design:type", browser_2.WorkspaceService)
599
- ], TaskTerminateQuickOpen.prototype, "workspaceService", void 0);
600
- TaskTerminateQuickOpen = __decorate([
601
- (0, inversify_1.injectable)()
602
- ], TaskTerminateQuickOpen);
603
- exports.TaskTerminateQuickOpen = TaskTerminateQuickOpen;
604
- let TaskRunningQuickOpen = class TaskRunningQuickOpen {
605
- async getItems() {
606
- const items = [];
607
- const runningTasks = await this.taskService.getRunningTasks();
608
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
609
- if (runningTasks.length <= 0) {
610
- items.push(({
611
- label: 'No task is currently running',
612
- }));
613
- }
614
- else {
615
- runningTasks.forEach((task) => {
616
- items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => {
617
- if (task.terminalId) {
618
- const terminal = this.terminalService.getByTerminalId(task.terminalId);
619
- if (terminal) {
620
- this.terminalService.open(terminal);
621
- }
622
- }
623
- }));
624
- });
625
- }
626
- return items;
627
- }
628
- async open() {
629
- var _a;
630
- const items = await this.getItems();
631
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select the task to show its output' });
632
- }
633
- };
634
- __decorate([
635
- (0, inversify_1.inject)(browser_1.LabelProvider),
636
- __metadata("design:type", browser_1.LabelProvider)
637
- ], TaskRunningQuickOpen.prototype, "labelProvider", void 0);
638
- __decorate([
639
- (0, inversify_1.inject)(browser_1.QuickInputService),
640
- (0, inversify_1.optional)(),
641
- __metadata("design:type", Object)
642
- ], TaskRunningQuickOpen.prototype, "quickInputService", void 0);
643
- __decorate([
644
- (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
645
- __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
646
- ], TaskRunningQuickOpen.prototype, "taskDefinitionRegistry", void 0);
647
- __decorate([
648
- (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
649
- __metadata("design:type", task_name_resolver_1.TaskNameResolver)
650
- ], TaskRunningQuickOpen.prototype, "taskNameResolver", void 0);
651
- __decorate([
652
- (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
653
- __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
654
- ], TaskRunningQuickOpen.prototype, "taskSourceResolver", void 0);
655
- __decorate([
656
- (0, inversify_1.inject)(task_service_1.TaskService),
657
- __metadata("design:type", task_service_1.TaskService)
658
- ], TaskRunningQuickOpen.prototype, "taskService", void 0);
659
- __decorate([
660
- (0, inversify_1.inject)(browser_2.WorkspaceService),
661
- __metadata("design:type", browser_2.WorkspaceService)
662
- ], TaskRunningQuickOpen.prototype, "workspaceService", void 0);
663
- __decorate([
664
- (0, inversify_1.inject)(terminal_service_1.TerminalService),
665
- __metadata("design:type", Object)
666
- ], TaskRunningQuickOpen.prototype, "terminalService", void 0);
667
- TaskRunningQuickOpen = __decorate([
668
- (0, inversify_1.injectable)()
669
- ], TaskRunningQuickOpen);
670
- exports.TaskRunningQuickOpen = TaskRunningQuickOpen;
671
- class RunningTaskQuickOpenItem {
672
- constructor(taskInfo, taskService, taskNameResolver, taskSourceResolver, taskDefinitionRegistry, labelProvider, isMulti, execute) {
673
- this.taskInfo = taskInfo;
674
- this.taskService = taskService;
675
- this.taskNameResolver = taskNameResolver;
676
- this.taskSourceResolver = taskSourceResolver;
677
- this.taskDefinitionRegistry = taskDefinitionRegistry;
678
- this.labelProvider = labelProvider;
679
- this.isMulti = isMulti;
680
- this.execute = execute;
681
- }
682
- get label() {
683
- return this.taskNameResolver.resolve(this.taskInfo.config);
684
- }
685
- get description() {
686
- return renderScope(this.taskInfo.config._scope, this.isMulti);
687
- }
688
- get detail() {
689
- return this.taskInfo.config.detail;
690
- }
691
- }
692
- exports.RunningTaskQuickOpenItem = RunningTaskQuickOpenItem;
693
- let TaskRestartRunningQuickOpen = class TaskRestartRunningQuickOpen {
694
- async getItems() {
695
- const items = [];
696
- const runningTasks = await this.taskService.getRunningTasks();
697
- const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
698
- if (runningTasks.length <= 0) {
699
- items.push({
700
- label: 'No task to restart'
701
- });
702
- }
703
- else {
704
- runningTasks.forEach((task) => {
705
- items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.restartTask(task)));
706
- });
707
- }
708
- return items;
709
- }
710
- async open() {
711
- var _a;
712
- const items = await this.getItems();
713
- (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select task to restart' });
714
- }
715
- };
716
- __decorate([
717
- (0, inversify_1.inject)(browser_1.LabelProvider),
718
- __metadata("design:type", browser_1.LabelProvider)
719
- ], TaskRestartRunningQuickOpen.prototype, "labelProvider", void 0);
720
- __decorate([
721
- (0, inversify_1.inject)(browser_1.QuickInputService),
722
- (0, inversify_1.optional)(),
723
- __metadata("design:type", Object)
724
- ], TaskRestartRunningQuickOpen.prototype, "quickInputService", void 0);
725
- __decorate([
726
- (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
727
- __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
728
- ], TaskRestartRunningQuickOpen.prototype, "taskDefinitionRegistry", void 0);
729
- __decorate([
730
- (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
731
- __metadata("design:type", task_name_resolver_1.TaskNameResolver)
732
- ], TaskRestartRunningQuickOpen.prototype, "taskNameResolver", void 0);
733
- __decorate([
734
- (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
735
- __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
736
- ], TaskRestartRunningQuickOpen.prototype, "taskSourceResolver", void 0);
737
- __decorate([
738
- (0, inversify_1.inject)(task_service_1.TaskService),
739
- __metadata("design:type", task_service_1.TaskService)
740
- ], TaskRestartRunningQuickOpen.prototype, "taskService", void 0);
741
- __decorate([
742
- (0, inversify_1.inject)(browser_2.WorkspaceService),
743
- __metadata("design:type", browser_2.WorkspaceService)
744
- ], TaskRestartRunningQuickOpen.prototype, "workspaceService", void 0);
745
- TaskRestartRunningQuickOpen = __decorate([
746
- (0, inversify_1.injectable)()
747
- ], TaskRestartRunningQuickOpen);
748
- exports.TaskRestartRunningQuickOpen = TaskRestartRunningQuickOpen;
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2017 Ericsson 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
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
22
+ };
23
+ var __metadata = (this && this.__metadata) || function (k, v) {
24
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25
+ };
26
+ var QuickOpenTask_1;
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.TaskRestartRunningQuickOpen = exports.RunningTaskQuickOpenItem = exports.TaskRunningQuickOpen = exports.TaskTerminateQuickOpen = exports.TaskConfigureQuickOpenItem = exports.ConfigureBuildOrTestTaskQuickOpenItem = exports.TaskRunQuickOpenItem = exports.QuickOpenTask = exports.SHOW_ALL = exports.NO_TASK_TO_RUN = exports.CONFIGURE_A_TASK = exports.CHOOSE_TASK = exports.TaskEntry = exports.ConfigureTaskAction = void 0;
29
+ const inversify_1 = require("@theia/core/shared/inversify");
30
+ const task_service_1 = require("./task-service");
31
+ const task_protocol_1 = require("../common/task-protocol");
32
+ const task_definition_registry_1 = require("./task-definition-registry");
33
+ const uri_1 = require("@theia/core/lib/common/uri");
34
+ const browser_1 = require("@theia/core/lib/browser");
35
+ const browser_2 = require("@theia/workspace/lib/browser");
36
+ const terminal_service_1 = require("@theia/terminal/lib/browser/base/terminal-service");
37
+ const provided_task_configurations_1 = require("./provided-task-configurations");
38
+ const task_name_resolver_1 = require("./task-name-resolver");
39
+ const task_source_resolver_1 = require("./task-source-resolver");
40
+ const task_configuration_manager_1 = require("./task-configuration-manager");
41
+ const quick_input_service_1 = require("@theia/core/lib/browser/quick-input/quick-input-service");
42
+ const nls_1 = require("@theia/core/lib/common/nls");
43
+ const pickerQuickAccess_1 = require("@theia/monaco-editor-core/esm/vs/platform/quickinput/browser/pickerQuickAccess");
44
+ var ConfigureTaskAction;
45
+ (function (ConfigureTaskAction) {
46
+ ConfigureTaskAction.ID = 'workbench.action.tasks.configureTaskRunner';
47
+ ConfigureTaskAction.TEXT = 'Configure Task';
48
+ })(ConfigureTaskAction = exports.ConfigureTaskAction || (exports.ConfigureTaskAction = {}));
49
+ var TaskEntry;
50
+ (function (TaskEntry) {
51
+ function isQuickPickValue(item) {
52
+ return 'value' in item && typeof item.value === 'string';
53
+ }
54
+ TaskEntry.isQuickPickValue = isQuickPickValue;
55
+ })(TaskEntry = exports.TaskEntry || (exports.TaskEntry = {}));
56
+ exports.CHOOSE_TASK = nls_1.nls.localizeByDefault('Select the task to run');
57
+ exports.CONFIGURE_A_TASK = nls_1.nls.localizeByDefault('Configure a Task');
58
+ exports.NO_TASK_TO_RUN = nls_1.nls.localize('theia/task/noTaskToRun', 'No task to run found. Configure Tasks...');
59
+ exports.SHOW_ALL = nls_1.nls.localizeByDefault('Show All Tasks...');
60
+ let QuickOpenTask = QuickOpenTask_1 = class QuickOpenTask {
61
+ constructor() {
62
+ this.description = 'Run Task';
63
+ this.items = [];
64
+ }
65
+ init() {
66
+ return this.doInit(this.taskService.startUserAction());
67
+ }
68
+ async doInit(token) {
69
+ const recentTasks = this.taskService.recentTasks;
70
+ const configuredTasks = await this.taskService.getConfiguredTasks(token);
71
+ const providedTypes = this.taskDefinitionRegistry.getAll();
72
+ const { filteredRecentTasks, filteredConfiguredTasks } = this.getFilteredTasks(recentTasks, configuredTasks, []);
73
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
74
+ this.items = [];
75
+ const filteredRecentTasksItems = this.getItems(filteredRecentTasks, 'recently used tasks', token, isMulti);
76
+ const filteredConfiguredTasksItems = this.getItems(filteredConfiguredTasks, 'configured tasks', token, isMulti, {
77
+ label: `$(plus) ${exports.CONFIGURE_A_TASK}`,
78
+ execute: () => this.configure()
79
+ });
80
+ const providedTypeItems = this.createProvidedTypeItems(providedTypes);
81
+ this.items.push(...filteredRecentTasksItems, ...filteredConfiguredTasksItems, ...providedTypeItems);
82
+ if (!this.items.length) {
83
+ this.items.push(({
84
+ label: exports.NO_TASK_TO_RUN,
85
+ execute: () => this.configure()
86
+ }));
87
+ }
88
+ }
89
+ createProvidedTypeItems(providedTypes) {
90
+ const result = [];
91
+ result.push({ type: 'separator', label: nls_1.nls.localizeByDefault('contributed') });
92
+ providedTypes.sort((t1, t2) => t1.taskType.localeCompare(t2.taskType));
93
+ for (const definition of providedTypes) {
94
+ const type = definition.taskType;
95
+ result.push(this.toProvidedTaskTypeEntry(type, `$(folder) ${type}`));
96
+ }
97
+ result.push(this.toProvidedTaskTypeEntry(exports.SHOW_ALL, exports.SHOW_ALL));
98
+ return result;
99
+ }
100
+ toProvidedTaskTypeEntry(type, label) {
101
+ return {
102
+ label,
103
+ value: type,
104
+ /**
105
+ * This function is used in the context of a QuickAccessProvider (triggered from the command palette: '?task').
106
+ * It triggers a call to QuickOpenTask#getPicks,
107
+ * the 'execute' function below is called when the user selects an entry for a task type which triggers the display of
108
+ * the second level quick pick.
109
+ *
110
+ * Due to the asynchronous resolution of second-level tasks, there may be a delay in showing the quick input widget.
111
+ *
112
+ * NOTE: The widget is not delayed in other contexts e.g. by commands (Run Tasks), see the implementation at QuickOpenTask#open
113
+ *
114
+ * To improve the performance, we may consider using a `PickerQuickAccessProvider` instead of a `QuickAccessProvider`,
115
+ * and support providing 'FastAndSlowPicks'.
116
+ *
117
+ * TODO: Consider the introduction and exposure of monaco `PickerQuickAccessProvider` and the corresponding refactoring for this and other
118
+ * users of QuickAccessProvider.
119
+ */
120
+ execute: () => {
121
+ this.doSecondLevel(type);
122
+ }
123
+ };
124
+ }
125
+ onDidTriggerGearIcon(item) {
126
+ if (item instanceof TaskRunQuickOpenItem) {
127
+ this.taskService.configure(item.token, item.task);
128
+ this.quickInputService.hide();
129
+ }
130
+ }
131
+ async open() {
132
+ this.showMultiLevelQuickPick();
133
+ }
134
+ async showMultiLevelQuickPick(skipInit) {
135
+ if (!skipInit) {
136
+ await this.init();
137
+ }
138
+ const picker = this.quickInputService.createQuickPick();
139
+ picker.placeholder = exports.CHOOSE_TASK;
140
+ picker.matchOnDescription = true;
141
+ picker.ignoreFocusOut = false;
142
+ picker.items = this.items;
143
+ picker.onDidTriggerItemButton(({ item }) => this.onDidTriggerGearIcon(item));
144
+ const firstLevelTask = await this.doPickerFirstLevel(picker);
145
+ if (!!firstLevelTask && TaskEntry.isQuickPickValue(firstLevelTask)) {
146
+ // A taskType was selected
147
+ picker.busy = true;
148
+ await this.doSecondLevel(firstLevelTask.value);
149
+ }
150
+ else if (!!firstLevelTask && 'execute' in firstLevelTask && typeof firstLevelTask.execute === 'function') {
151
+ firstLevelTask.execute();
152
+ }
153
+ picker.dispose();
154
+ }
155
+ async doPickerFirstLevel(picker) {
156
+ picker.show();
157
+ const firstLevelPickerResult = await new Promise(resolve => {
158
+ picker.onDidAccept(async () => {
159
+ resolve(picker.selectedItems ? picker.selectedItems[0] : undefined);
160
+ });
161
+ });
162
+ return firstLevelPickerResult !== null && firstLevelPickerResult !== void 0 ? firstLevelPickerResult : undefined;
163
+ }
164
+ async doSecondLevel(taskType) {
165
+ var _a;
166
+ // Resolve Second level tasks based on selected TaskType
167
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
168
+ const token = this.taskService.startUserAction();
169
+ const providedTasks = taskType === exports.SHOW_ALL ?
170
+ await this.taskService.getProvidedTasks(token, provided_task_configurations_1.ALL_TASK_TYPES) :
171
+ await this.taskService.getProvidedTasks(token, taskType);
172
+ const providedTasksItems = this.getItems(providedTasks, taskType + ' tasks', token, isMulti);
173
+ const label = providedTasksItems.length ?
174
+ nls_1.nls.localizeByDefault('Go back ↩') :
175
+ nls_1.nls.localizeByDefault('No {0} tasks found. Go back ↩', taskType);
176
+ providedTasksItems.push(({
177
+ label,
178
+ execute: () => this.showMultiLevelQuickPick(true)
179
+ }));
180
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(providedTasksItems, {
181
+ placeholder: exports.CHOOSE_TASK,
182
+ onDidTriggerItemButton: ({ item }) => this.onDidTriggerGearIcon(item)
183
+ });
184
+ }
185
+ attach() {
186
+ this.items = [];
187
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
188
+ this.taskService.getRunningTasks().then(tasks => {
189
+ var _a;
190
+ if (!tasks.length) {
191
+ this.items.push({
192
+ label: 'No tasks found',
193
+ });
194
+ }
195
+ else {
196
+ tasks.forEach((task) => {
197
+ // can only attach to terminal processes, so only list those
198
+ if (task.terminalId) {
199
+ this.items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.attach(task.terminalId, task)));
200
+ }
201
+ });
202
+ }
203
+ if (this.items.length === 0) {
204
+ this.items.push(({
205
+ label: 'No tasks found'
206
+ }));
207
+ }
208
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, { placeholder: exports.CHOOSE_TASK });
209
+ });
210
+ }
211
+ async configure() {
212
+ var _a;
213
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.pick(this.resolveItemsToConfigure(), { placeHolder: nls_1.nls.localizeByDefault('Select a task to configure') }).then(async (item) => {
214
+ if (item && 'execute' in item && typeof item.execute === 'function') {
215
+ item.execute();
216
+ }
217
+ });
218
+ }
219
+ async resolveItemsToConfigure() {
220
+ const items = [];
221
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
222
+ const token = this.taskService.startUserAction();
223
+ const configuredTasks = await this.taskService.getConfiguredTasks(token);
224
+ const providedTasks = await this.taskService.getProvidedTasks(token, provided_task_configurations_1.ALL_TASK_TYPES);
225
+ // check if tasks.json exists. If not, display "Create tasks.json file from template"
226
+ // If tasks.json exists and empty, display 'Open tasks.json file'
227
+ const { filteredConfiguredTasks, filteredProvidedTasks } = this.getFilteredTasks([], configuredTasks, providedTasks);
228
+ const groupedTasks = this.getGroupedTasksByWorkspaceFolder([...filteredConfiguredTasks, ...filteredProvidedTasks]);
229
+ if (groupedTasks.has(task_protocol_1.TaskScope.Global.toString())) {
230
+ const configs = groupedTasks.get(task_protocol_1.TaskScope.Global.toString());
231
+ this.addConfigurationItems(items, configs, token, isMulti);
232
+ }
233
+ if (groupedTasks.has(task_protocol_1.TaskScope.Workspace.toString())) {
234
+ const configs = groupedTasks.get(task_protocol_1.TaskScope.Workspace.toString());
235
+ this.addConfigurationItems(items, configs, token, isMulti);
236
+ }
237
+ const rootUris = (await this.workspaceService.roots).map(rootStat => rootStat.resource.toString());
238
+ for (const rootFolder of rootUris) {
239
+ const folderName = new uri_1.default(rootFolder).displayName;
240
+ if (groupedTasks.has(rootFolder)) {
241
+ const configs = groupedTasks.get(rootFolder.toString());
242
+ this.addConfigurationItems(items, configs, token, isMulti);
243
+ }
244
+ else {
245
+ const { configUri } = this.preferences.resolve('tasks', [], rootFolder);
246
+ const existTaskConfigFile = !!configUri;
247
+ items.push(({
248
+ label: existTaskConfigFile ? 'Open tasks.json file' : 'Create tasks.json file from template',
249
+ execute: () => {
250
+ setTimeout(() => this.taskConfigurationManager.openConfiguration(rootFolder));
251
+ }
252
+ }));
253
+ }
254
+ if (items.length > 0) {
255
+ items.unshift({
256
+ type: 'separator',
257
+ label: isMulti ? folderName : ''
258
+ });
259
+ }
260
+ }
261
+ if (items.length === 0) {
262
+ items.push(({
263
+ label: 'No tasks found'
264
+ }));
265
+ }
266
+ return items;
267
+ }
268
+ addConfigurationItems(items, configs, token, isMulti) {
269
+ items.push(...configs.map(taskConfig => {
270
+ const item = new TaskConfigureQuickOpenItem(token, taskConfig, this.taskService, this.taskNameResolver, this.workspaceService, isMulti);
271
+ item['taskDefinitionRegistry'] = this.taskDefinitionRegistry;
272
+ return item;
273
+ }).sort((t1, t2) => t1.label.localeCompare(t2.label)));
274
+ }
275
+ getTaskItems() {
276
+ return this.items.filter((item) => item.type !== 'separator' && item.task !== undefined);
277
+ }
278
+ async runBuildOrTestTask(buildOrTestType) {
279
+ var _a;
280
+ const shouldRunBuildTask = buildOrTestType === 'build';
281
+ const token = this.taskService.startUserAction();
282
+ await this.doInit(token);
283
+ const taskItems = this.getTaskItems();
284
+ if (taskItems.length > 0) { // the item in `this.items` is not 'No tasks found'
285
+ const buildOrTestTasks = taskItems.filter((t) => shouldRunBuildTask ? task_protocol_1.TaskCustomization.isBuildTask(t.task) : task_protocol_1.TaskCustomization.isTestTask(t.task));
286
+ if (buildOrTestTasks.length > 0) { // build / test tasks are defined in the workspace
287
+ const defaultBuildOrTestTasks = buildOrTestTasks.filter((t) => shouldRunBuildTask ? task_protocol_1.TaskCustomization.isDefaultBuildTask(t.task) : task_protocol_1.TaskCustomization.isDefaultTestTask(t.task));
288
+ if (defaultBuildOrTestTasks.length === 1) { // run the default build / test task
289
+ const defaultBuildOrTestTask = defaultBuildOrTestTasks[0];
290
+ const taskToRun = defaultBuildOrTestTask.task;
291
+ const scope = taskToRun._scope;
292
+ if (this.taskDefinitionRegistry && !!this.taskDefinitionRegistry.getDefinition(taskToRun)) {
293
+ this.taskService.run(token, taskToRun.source, taskToRun.label, scope);
294
+ }
295
+ else {
296
+ this.taskService.run(token, taskToRun._source, taskToRun.label, scope);
297
+ }
298
+ return;
299
+ }
300
+ // if default build / test task is not found, or there are more than one default,
301
+ // display the list of build /test tasks to let the user decide which to run
302
+ this.items = buildOrTestTasks;
303
+ }
304
+ else { // no build / test tasks, display an action item to configure the build / test task
305
+ this.items = [({
306
+ label: `No ${buildOrTestType} task to run found. Configure ${buildOrTestType.charAt(0).toUpperCase() + buildOrTestType.slice(1)} Task...`,
307
+ execute: () => {
308
+ this.doInit(token).then(() => {
309
+ var _a;
310
+ // update the `tasks.json` file, instead of running the task itself
311
+ this.items = this.getTaskItems().map((item) => new ConfigureBuildOrTestTaskQuickOpenItem(token, item.task, this.taskService, this.workspaceService.isMultiRootWorkspaceOpened, this.taskNameResolver, shouldRunBuildTask, this.taskConfigurationManager, this.taskDefinitionRegistry, this.taskSourceResolver));
312
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, { placeholder: `Select the task to be used as the default ${buildOrTestType} task` });
313
+ });
314
+ }
315
+ })];
316
+ }
317
+ }
318
+ else { // no tasks are currently present, prompt users if they'd like to configure a task.
319
+ this.items = [{
320
+ label: `No ${buildOrTestType} task to run found. Configure ${buildOrTestType.charAt(0).toUpperCase() + buildOrTestType.slice(1)} Task...`,
321
+ execute: () => this.configure()
322
+ }];
323
+ }
324
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(this.items, {
325
+ placeholder: `Select the ${buildOrTestType} task to run`,
326
+ onDidTriggerItemButton: ({ item }) => this.onDidTriggerGearIcon(item)
327
+ });
328
+ }
329
+ async getPicks(filter, token) {
330
+ await this.init();
331
+ return (0, quick_input_service_1.filterItems)(this.items, filter);
332
+ }
333
+ registerQuickAccessProvider() {
334
+ this.quickAccessRegistry.registerQuickAccessProvider({
335
+ getInstance: () => this,
336
+ prefix: QuickOpenTask_1.PREFIX,
337
+ placeholder: 'Select the task to run',
338
+ helpEntries: [{ description: 'Run Task', needsEditor: false }]
339
+ });
340
+ }
341
+ getRunningTaskLabel(task) {
342
+ return `Task id: ${task.taskId}, label: ${task.config.label}`;
343
+ }
344
+ getItems(tasks, groupLabel, token, isMulti, defaultTask) {
345
+ const items = tasks.map(task => new TaskRunQuickOpenItem(token, task, this.taskService, isMulti, this.taskDefinitionRegistry, this.taskNameResolver, this.taskSourceResolver, this.taskConfigurationManager, [{
346
+ iconClass: 'codicon-gear',
347
+ tooltip: 'Configure Task',
348
+ }])).sort((t1, t2) => {
349
+ var _a, _b;
350
+ let result = ((_a = t1.description) !== null && _a !== void 0 ? _a : '').localeCompare((_b = t2.description) !== null && _b !== void 0 ? _b : '');
351
+ if (result === 0) {
352
+ result = t1.label.localeCompare(t2.label);
353
+ }
354
+ return result;
355
+ });
356
+ if (items.length === 0 && defaultTask) {
357
+ items.push(defaultTask);
358
+ }
359
+ if (items.length > 0) {
360
+ items.unshift({ type: 'separator', label: groupLabel });
361
+ }
362
+ return items;
363
+ }
364
+ getFilteredTasks(recentTasks, configuredTasks, providedTasks) {
365
+ const filteredRecentTasks = [];
366
+ recentTasks.forEach(recent => {
367
+ const originalTaskConfig = [...configuredTasks, ...providedTasks].find(t => this.taskDefinitionRegistry.compareTasks(recent, t));
368
+ if (originalTaskConfig) {
369
+ filteredRecentTasks.push(originalTaskConfig);
370
+ }
371
+ });
372
+ const filteredProvidedTasks = [];
373
+ providedTasks.forEach(provided => {
374
+ const exist = [...filteredRecentTasks, ...configuredTasks].some(t => this.taskDefinitionRegistry.compareTasks(provided, t));
375
+ if (!exist) {
376
+ filteredProvidedTasks.push(provided);
377
+ }
378
+ });
379
+ const filteredConfiguredTasks = [];
380
+ configuredTasks.forEach(configured => {
381
+ const exist = filteredRecentTasks.some(t => this.taskDefinitionRegistry.compareTasks(configured, t));
382
+ if (!exist) {
383
+ filteredConfiguredTasks.push(configured);
384
+ }
385
+ });
386
+ return {
387
+ filteredRecentTasks, filteredConfiguredTasks, filteredProvidedTasks
388
+ };
389
+ }
390
+ getGroupedTasksByWorkspaceFolder(tasks) {
391
+ const grouped = new Map();
392
+ for (const task of tasks) {
393
+ const scope = task._scope;
394
+ if (grouped.has(scope.toString())) {
395
+ grouped.get(scope.toString()).push(task);
396
+ }
397
+ else {
398
+ grouped.set(scope.toString(), [task]);
399
+ }
400
+ }
401
+ for (const taskConfigs of grouped.values()) {
402
+ taskConfigs.sort((t1, t2) => t1.label.localeCompare(t2.label));
403
+ }
404
+ return grouped;
405
+ }
406
+ };
407
+ QuickOpenTask.PREFIX = 'task ';
408
+ __decorate([
409
+ (0, inversify_1.inject)(task_service_1.TaskService),
410
+ __metadata("design:type", task_service_1.TaskService)
411
+ ], QuickOpenTask.prototype, "taskService", void 0);
412
+ __decorate([
413
+ (0, inversify_1.inject)(browser_1.QuickInputService),
414
+ (0, inversify_1.optional)(),
415
+ __metadata("design:type", Object)
416
+ ], QuickOpenTask.prototype, "quickInputService", void 0);
417
+ __decorate([
418
+ (0, inversify_1.inject)(browser_1.QuickAccessRegistry),
419
+ __metadata("design:type", Object)
420
+ ], QuickOpenTask.prototype, "quickAccessRegistry", void 0);
421
+ __decorate([
422
+ (0, inversify_1.inject)(browser_2.WorkspaceService),
423
+ __metadata("design:type", browser_2.WorkspaceService)
424
+ ], QuickOpenTask.prototype, "workspaceService", void 0);
425
+ __decorate([
426
+ (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
427
+ __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
428
+ ], QuickOpenTask.prototype, "taskDefinitionRegistry", void 0);
429
+ __decorate([
430
+ (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
431
+ __metadata("design:type", task_name_resolver_1.TaskNameResolver)
432
+ ], QuickOpenTask.prototype, "taskNameResolver", void 0);
433
+ __decorate([
434
+ (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
435
+ __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
436
+ ], QuickOpenTask.prototype, "taskSourceResolver", void 0);
437
+ __decorate([
438
+ (0, inversify_1.inject)(task_configuration_manager_1.TaskConfigurationManager),
439
+ __metadata("design:type", task_configuration_manager_1.TaskConfigurationManager)
440
+ ], QuickOpenTask.prototype, "taskConfigurationManager", void 0);
441
+ __decorate([
442
+ (0, inversify_1.inject)(browser_1.PreferenceService),
443
+ __metadata("design:type", Object)
444
+ ], QuickOpenTask.prototype, "preferences", void 0);
445
+ __decorate([
446
+ (0, inversify_1.inject)(browser_1.LabelProvider),
447
+ __metadata("design:type", browser_1.LabelProvider)
448
+ ], QuickOpenTask.prototype, "labelProvider", void 0);
449
+ QuickOpenTask = QuickOpenTask_1 = __decorate([
450
+ (0, inversify_1.injectable)()
451
+ ], QuickOpenTask);
452
+ exports.QuickOpenTask = QuickOpenTask;
453
+ class TaskRunQuickOpenItem {
454
+ constructor(token, task, taskService, isMulti, taskDefinitionRegistry, taskNameResolver, taskSourceResolver, taskConfigurationManager, buttons) {
455
+ this.token = token;
456
+ this.task = task;
457
+ this.taskService = taskService;
458
+ this.isMulti = isMulti;
459
+ this.taskDefinitionRegistry = taskDefinitionRegistry;
460
+ this.taskNameResolver = taskNameResolver;
461
+ this.taskSourceResolver = taskSourceResolver;
462
+ this.taskConfigurationManager = taskConfigurationManager;
463
+ this.buttons = buttons;
464
+ }
465
+ get label() {
466
+ return this.taskNameResolver.resolve(this.task);
467
+ }
468
+ get description() {
469
+ return renderScope(this.task._scope, this.isMulti);
470
+ }
471
+ get detail() {
472
+ return this.task.detail;
473
+ }
474
+ execute() {
475
+ const scope = this.task._scope;
476
+ if (this.taskDefinitionRegistry && !!this.taskDefinitionRegistry.getDefinition(this.task)) {
477
+ this.taskService.run(this.token, this.task.source || this.task._source, this.task.label, scope);
478
+ }
479
+ else {
480
+ this.taskService.run(this.token, this.task._source, this.task.label, scope);
481
+ }
482
+ }
483
+ trigger() {
484
+ this.taskService.configure(this.token, this.task);
485
+ return pickerQuickAccess_1.TriggerAction.CLOSE_PICKER;
486
+ }
487
+ }
488
+ exports.TaskRunQuickOpenItem = TaskRunQuickOpenItem;
489
+ class ConfigureBuildOrTestTaskQuickOpenItem extends TaskRunQuickOpenItem {
490
+ constructor(token, task, taskService, isMulti, taskNameResolver, isBuildTask, taskConfigurationManager, taskDefinitionRegistry, taskSourceResolver) {
491
+ super(token, task, taskService, isMulti, taskDefinitionRegistry, taskNameResolver, taskSourceResolver, taskConfigurationManager);
492
+ this.isBuildTask = isBuildTask;
493
+ }
494
+ execute() {
495
+ this.taskService.updateTaskConfiguration(this.token, this.task, { group: { kind: this.isBuildTask ? 'build' : 'test', isDefault: true } })
496
+ .then(() => {
497
+ if (this.task._scope) {
498
+ this.taskConfigurationManager.openConfiguration(this.task._scope);
499
+ }
500
+ });
501
+ }
502
+ }
503
+ exports.ConfigureBuildOrTestTaskQuickOpenItem = ConfigureBuildOrTestTaskQuickOpenItem;
504
+ function renderScope(scope, isMulti) {
505
+ if (typeof scope === 'string') {
506
+ if (isMulti) {
507
+ return new uri_1.default(scope).displayName;
508
+ }
509
+ else {
510
+ return '';
511
+ }
512
+ }
513
+ else {
514
+ return task_protocol_1.TaskScope[scope];
515
+ }
516
+ }
517
+ class TaskConfigureQuickOpenItem {
518
+ constructor(token, task, taskService, taskNameResolver, workspaceService, isMulti) {
519
+ this.token = token;
520
+ this.task = task;
521
+ this.taskService = taskService;
522
+ this.taskNameResolver = taskNameResolver;
523
+ this.workspaceService = workspaceService;
524
+ this.isMulti = isMulti;
525
+ const stat = this.workspaceService.workspace;
526
+ this.isMulti = stat ? !stat.isDirectory : false;
527
+ }
528
+ get label() {
529
+ return this.taskNameResolver.resolve(this.task);
530
+ }
531
+ get description() {
532
+ return renderScope(this.task._scope, this.isMulti);
533
+ }
534
+ accept() {
535
+ this.execute();
536
+ }
537
+ execute() {
538
+ this.taskService.configure(this.token, this.task);
539
+ }
540
+ }
541
+ exports.TaskConfigureQuickOpenItem = TaskConfigureQuickOpenItem;
542
+ let TaskTerminateQuickOpen = class TaskTerminateQuickOpen {
543
+ async getItems() {
544
+ const items = [];
545
+ const runningTasks = await this.taskService.getRunningTasks();
546
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
547
+ if (runningTasks.length <= 0) {
548
+ items.push(({
549
+ label: 'No task is currently running',
550
+ }));
551
+ }
552
+ else {
553
+ runningTasks.forEach((task) => {
554
+ items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.kill(task.taskId)));
555
+ });
556
+ if (runningTasks.length > 1) {
557
+ items.push(({
558
+ label: 'All running tasks',
559
+ execute: () => {
560
+ runningTasks.forEach((t) => {
561
+ this.taskService.kill(t.taskId);
562
+ });
563
+ }
564
+ }));
565
+ }
566
+ }
567
+ return items;
568
+ }
569
+ async open() {
570
+ var _a;
571
+ const items = await this.getItems();
572
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select task to terminate' });
573
+ }
574
+ };
575
+ __decorate([
576
+ (0, inversify_1.inject)(browser_1.LabelProvider),
577
+ __metadata("design:type", browser_1.LabelProvider)
578
+ ], TaskTerminateQuickOpen.prototype, "labelProvider", void 0);
579
+ __decorate([
580
+ (0, inversify_1.inject)(browser_1.QuickInputService),
581
+ (0, inversify_1.optional)(),
582
+ __metadata("design:type", Object)
583
+ ], TaskTerminateQuickOpen.prototype, "quickInputService", void 0);
584
+ __decorate([
585
+ (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
586
+ __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
587
+ ], TaskTerminateQuickOpen.prototype, "taskDefinitionRegistry", void 0);
588
+ __decorate([
589
+ (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
590
+ __metadata("design:type", task_name_resolver_1.TaskNameResolver)
591
+ ], TaskTerminateQuickOpen.prototype, "taskNameResolver", void 0);
592
+ __decorate([
593
+ (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
594
+ __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
595
+ ], TaskTerminateQuickOpen.prototype, "taskSourceResolver", void 0);
596
+ __decorate([
597
+ (0, inversify_1.inject)(task_service_1.TaskService),
598
+ __metadata("design:type", task_service_1.TaskService)
599
+ ], TaskTerminateQuickOpen.prototype, "taskService", void 0);
600
+ __decorate([
601
+ (0, inversify_1.inject)(browser_2.WorkspaceService),
602
+ __metadata("design:type", browser_2.WorkspaceService)
603
+ ], TaskTerminateQuickOpen.prototype, "workspaceService", void 0);
604
+ TaskTerminateQuickOpen = __decorate([
605
+ (0, inversify_1.injectable)()
606
+ ], TaskTerminateQuickOpen);
607
+ exports.TaskTerminateQuickOpen = TaskTerminateQuickOpen;
608
+ let TaskRunningQuickOpen = class TaskRunningQuickOpen {
609
+ async getItems() {
610
+ const items = [];
611
+ const runningTasks = await this.taskService.getRunningTasks();
612
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
613
+ if (runningTasks.length <= 0) {
614
+ items.push(({
615
+ label: 'No task is currently running',
616
+ }));
617
+ }
618
+ else {
619
+ runningTasks.forEach((task) => {
620
+ items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => {
621
+ if (task.terminalId) {
622
+ const terminal = this.terminalService.getByTerminalId(task.terminalId);
623
+ if (terminal) {
624
+ this.terminalService.open(terminal);
625
+ }
626
+ }
627
+ }));
628
+ });
629
+ }
630
+ return items;
631
+ }
632
+ async open() {
633
+ var _a;
634
+ const items = await this.getItems();
635
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select the task to show its output' });
636
+ }
637
+ };
638
+ __decorate([
639
+ (0, inversify_1.inject)(browser_1.LabelProvider),
640
+ __metadata("design:type", browser_1.LabelProvider)
641
+ ], TaskRunningQuickOpen.prototype, "labelProvider", void 0);
642
+ __decorate([
643
+ (0, inversify_1.inject)(browser_1.QuickInputService),
644
+ (0, inversify_1.optional)(),
645
+ __metadata("design:type", Object)
646
+ ], TaskRunningQuickOpen.prototype, "quickInputService", void 0);
647
+ __decorate([
648
+ (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
649
+ __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
650
+ ], TaskRunningQuickOpen.prototype, "taskDefinitionRegistry", void 0);
651
+ __decorate([
652
+ (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
653
+ __metadata("design:type", task_name_resolver_1.TaskNameResolver)
654
+ ], TaskRunningQuickOpen.prototype, "taskNameResolver", void 0);
655
+ __decorate([
656
+ (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
657
+ __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
658
+ ], TaskRunningQuickOpen.prototype, "taskSourceResolver", void 0);
659
+ __decorate([
660
+ (0, inversify_1.inject)(task_service_1.TaskService),
661
+ __metadata("design:type", task_service_1.TaskService)
662
+ ], TaskRunningQuickOpen.prototype, "taskService", void 0);
663
+ __decorate([
664
+ (0, inversify_1.inject)(browser_2.WorkspaceService),
665
+ __metadata("design:type", browser_2.WorkspaceService)
666
+ ], TaskRunningQuickOpen.prototype, "workspaceService", void 0);
667
+ __decorate([
668
+ (0, inversify_1.inject)(terminal_service_1.TerminalService),
669
+ __metadata("design:type", Object)
670
+ ], TaskRunningQuickOpen.prototype, "terminalService", void 0);
671
+ TaskRunningQuickOpen = __decorate([
672
+ (0, inversify_1.injectable)()
673
+ ], TaskRunningQuickOpen);
674
+ exports.TaskRunningQuickOpen = TaskRunningQuickOpen;
675
+ class RunningTaskQuickOpenItem {
676
+ constructor(taskInfo, taskService, taskNameResolver, taskSourceResolver, taskDefinitionRegistry, labelProvider, isMulti, execute) {
677
+ this.taskInfo = taskInfo;
678
+ this.taskService = taskService;
679
+ this.taskNameResolver = taskNameResolver;
680
+ this.taskSourceResolver = taskSourceResolver;
681
+ this.taskDefinitionRegistry = taskDefinitionRegistry;
682
+ this.labelProvider = labelProvider;
683
+ this.isMulti = isMulti;
684
+ this.execute = execute;
685
+ }
686
+ get label() {
687
+ return this.taskNameResolver.resolve(this.taskInfo.config);
688
+ }
689
+ get description() {
690
+ return renderScope(this.taskInfo.config._scope, this.isMulti);
691
+ }
692
+ get detail() {
693
+ return this.taskInfo.config.detail;
694
+ }
695
+ }
696
+ exports.RunningTaskQuickOpenItem = RunningTaskQuickOpenItem;
697
+ let TaskRestartRunningQuickOpen = class TaskRestartRunningQuickOpen {
698
+ async getItems() {
699
+ const items = [];
700
+ const runningTasks = await this.taskService.getRunningTasks();
701
+ const isMulti = this.workspaceService.isMultiRootWorkspaceOpened;
702
+ if (runningTasks.length <= 0) {
703
+ items.push({
704
+ label: 'No task to restart'
705
+ });
706
+ }
707
+ else {
708
+ runningTasks.forEach((task) => {
709
+ items.push(new RunningTaskQuickOpenItem(task, this.taskService, this.taskNameResolver, this.taskSourceResolver, this.taskDefinitionRegistry, this.labelProvider, isMulti, () => this.taskService.restartTask(task)));
710
+ });
711
+ }
712
+ return items;
713
+ }
714
+ async open() {
715
+ var _a;
716
+ const items = await this.getItems();
717
+ (_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(items, { placeholder: 'Select task to restart' });
718
+ }
719
+ };
720
+ __decorate([
721
+ (0, inversify_1.inject)(browser_1.LabelProvider),
722
+ __metadata("design:type", browser_1.LabelProvider)
723
+ ], TaskRestartRunningQuickOpen.prototype, "labelProvider", void 0);
724
+ __decorate([
725
+ (0, inversify_1.inject)(browser_1.QuickInputService),
726
+ (0, inversify_1.optional)(),
727
+ __metadata("design:type", Object)
728
+ ], TaskRestartRunningQuickOpen.prototype, "quickInputService", void 0);
729
+ __decorate([
730
+ (0, inversify_1.inject)(task_definition_registry_1.TaskDefinitionRegistry),
731
+ __metadata("design:type", task_definition_registry_1.TaskDefinitionRegistry)
732
+ ], TaskRestartRunningQuickOpen.prototype, "taskDefinitionRegistry", void 0);
733
+ __decorate([
734
+ (0, inversify_1.inject)(task_name_resolver_1.TaskNameResolver),
735
+ __metadata("design:type", task_name_resolver_1.TaskNameResolver)
736
+ ], TaskRestartRunningQuickOpen.prototype, "taskNameResolver", void 0);
737
+ __decorate([
738
+ (0, inversify_1.inject)(task_source_resolver_1.TaskSourceResolver),
739
+ __metadata("design:type", task_source_resolver_1.TaskSourceResolver)
740
+ ], TaskRestartRunningQuickOpen.prototype, "taskSourceResolver", void 0);
741
+ __decorate([
742
+ (0, inversify_1.inject)(task_service_1.TaskService),
743
+ __metadata("design:type", task_service_1.TaskService)
744
+ ], TaskRestartRunningQuickOpen.prototype, "taskService", void 0);
745
+ __decorate([
746
+ (0, inversify_1.inject)(browser_2.WorkspaceService),
747
+ __metadata("design:type", browser_2.WorkspaceService)
748
+ ], TaskRestartRunningQuickOpen.prototype, "workspaceService", void 0);
749
+ TaskRestartRunningQuickOpen = __decorate([
750
+ (0, inversify_1.injectable)()
751
+ ], TaskRestartRunningQuickOpen);
752
+ exports.TaskRestartRunningQuickOpen = TaskRestartRunningQuickOpen;
749
753
  //# sourceMappingURL=quick-open-task.js.map