@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.
- package/README.md +193 -193
- package/lib/browser/index.d.ts +6 -6
- package/lib/browser/index.js +33 -33
- package/lib/browser/process/process-task-contribution.d.ts +6 -6
- package/lib/browser/process/process-task-contribution.js +43 -43
- package/lib/browser/process/process-task-frontend-module.d.ts +2 -2
- package/lib/browser/process/process-task-frontend-module.js +27 -27
- package/lib/browser/process/process-task-resolver.d.ts +17 -17
- package/lib/browser/process/process-task-resolver.js +101 -101
- package/lib/browser/provided-task-configurations.d.ts +43 -43
- package/lib/browser/provided-task-configurations.js +213 -213
- package/lib/browser/provided-task-configurations.spec.d.ts +1 -1
- package/lib/browser/provided-task-configurations.spec.js +43 -43
- package/lib/browser/quick-open-task.d.ts +144 -144
- package/lib/browser/quick-open-task.d.ts.map +1 -1
- package/lib/browser/quick-open-task.js +752 -748
- package/lib/browser/quick-open-task.js.map +1 -1
- package/lib/browser/task-configuration-manager.d.ts +64 -64
- package/lib/browser/task-configuration-manager.js +261 -261
- package/lib/browser/task-configuration-model.d.ts +32 -32
- package/lib/browser/task-configuration-model.js +79 -79
- package/lib/browser/task-configurations.d.ts +127 -127
- package/lib/browser/task-configurations.js +486 -486
- package/lib/browser/task-contribution.d.ts +182 -182
- package/lib/browser/task-contribution.js +206 -206
- package/lib/browser/task-definition-registry.d.ts +38 -38
- package/lib/browser/task-definition-registry.js +134 -134
- package/lib/browser/task-definition-registry.spec.d.ts +1 -1
- package/lib/browser/task-definition-registry.spec.js +170 -170
- package/lib/browser/task-frontend-contribution.d.ts +56 -56
- package/lib/browser/task-frontend-contribution.js +358 -358
- package/lib/browser/task-frontend-module.d.ts +5 -5
- package/lib/browser/task-frontend-module.js +79 -79
- package/lib/browser/task-name-resolver.d.ts +13 -13
- package/lib/browser/task-name-resolver.js +67 -67
- package/lib/browser/task-node.d.ts +9 -9
- package/lib/browser/task-node.js +17 -17
- package/lib/browser/task-preferences.d.ts +4 -4
- package/lib/browser/task-preferences.js +40 -40
- package/lib/browser/task-problem-matcher-registry.d.ts +40 -40
- package/lib/browser/task-problem-matcher-registry.js +309 -309
- package/lib/browser/task-problem-pattern-registry.d.ts +23 -23
- package/lib/browser/task-problem-pattern-registry.js +210 -210
- package/lib/browser/task-schema-updater.d.ts +58 -58
- package/lib/browser/task-schema-updater.js +688 -688
- package/lib/browser/task-service.d.ts +279 -279
- package/lib/browser/task-service.js +1119 -1119
- package/lib/browser/task-source-resolver.d.ts +9 -9
- package/lib/browser/task-source-resolver.js +51 -51
- package/lib/browser/task-templates.d.ts +13 -13
- package/lib/browser/task-templates.js +161 -161
- package/lib/browser/task-terminal-widget-manager.d.ts +44 -44
- package/lib/browser/task-terminal-widget-manager.js +228 -228
- package/lib/browser/tasks-monaco-contribution.d.ts +1 -1
- package/lib/browser/tasks-monaco-contribution.js +27 -27
- package/lib/common/index.d.ts +4 -4
- package/lib/common/index.js +31 -31
- package/lib/common/problem-matcher-protocol.d.ts +124 -124
- package/lib/common/problem-matcher-protocol.js +132 -132
- package/lib/common/process/task-protocol.d.ts +68 -68
- package/lib/common/process/task-protocol.js +33 -33
- package/lib/common/task-common-module.d.ts +7 -7
- package/lib/common/task-common-module.js +33 -33
- package/lib/common/task-protocol.d.ts +192 -192
- package/lib/common/task-protocol.js +137 -137
- package/lib/common/task-util.d.ts +22 -22
- package/lib/common/task-util.js +46 -46
- package/lib/common/task-watcher.d.ts +17 -17
- package/lib/common/task-watcher.js +86 -86
- package/lib/node/custom/custom-task-runner-backend-module.d.ts +2 -2
- package/lib/node/custom/custom-task-runner-backend-module.js +36 -36
- package/lib/node/custom/custom-task-runner-contribution.d.ts +6 -6
- package/lib/node/custom/custom-task-runner-contribution.js +42 -42
- package/lib/node/custom/custom-task-runner.d.ts +15 -15
- package/lib/node/custom/custom-task-runner.js +69 -69
- package/lib/node/custom/custom-task.d.ts +20 -20
- package/lib/node/custom/custom-task.js +78 -78
- package/lib/node/index.d.ts +3 -3
- package/lib/node/index.js +30 -30
- package/lib/node/process/process-task-runner-backend-module.d.ts +2 -2
- package/lib/node/process/process-task-runner-backend-module.js +36 -36
- package/lib/node/process/process-task-runner-contribution.d.ts +6 -6
- package/lib/node/process/process-task-runner-contribution.js +43 -43
- package/lib/node/process/process-task-runner.d.ts +60 -60
- package/lib/node/process/process-task-runner.js +355 -355
- package/lib/node/process/process-task.d.ts +26 -26
- package/lib/node/process/process-task.js +135 -135
- package/lib/node/process/process-task.spec.d.ts +1 -1
- package/lib/node/process/process-task.spec.js +29 -29
- package/lib/node/task-abstract-line-matcher.d.ts +49 -49
- package/lib/node/task-abstract-line-matcher.js +273 -273
- package/lib/node/task-backend-application-contribution.d.ts +8 -8
- package/lib/node/task-backend-application-contribution.js +48 -48
- package/lib/node/task-backend-module.d.ts +3 -3
- package/lib/node/task-backend-module.js +50 -50
- package/lib/node/task-line-matchers.d.ts +27 -27
- package/lib/node/task-line-matchers.js +121 -121
- package/lib/node/task-manager.d.ts +55 -55
- package/lib/node/task-manager.js +135 -135
- package/lib/node/task-problem-collector.d.ts +10 -10
- package/lib/node/task-problem-collector.js +57 -57
- package/lib/node/task-problem-collector.spec.d.ts +1 -1
- package/lib/node/task-problem-collector.spec.js +310 -310
- package/lib/node/task-runner-protocol.d.ts +16 -16
- package/lib/node/task-runner-protocol.js +19 -19
- package/lib/node/task-runner.d.ts +50 -50
- package/lib/node/task-runner.js +97 -97
- package/lib/node/task-server.d.ts +39 -39
- package/lib/node/task-server.js +237 -237
- package/lib/node/task-server.slow-spec.d.ts +1 -1
- package/lib/node/task-server.slow-spec.js +395 -395
- package/lib/node/task.d.ts +50 -50
- package/lib/node/task.js +77 -77
- package/lib/node/test/task-test-container.d.ts +2 -2
- package/lib/node/test/task-test-container.js +58 -58
- package/package.json +14 -14
- package/src/browser/index.ts +22 -22
- package/src/browser/process/process-task-contribution.ts +31 -31
- package/src/browser/process/process-task-frontend-module.ts +27 -27
- package/src/browser/process/process-task-resolver.ts +89 -89
- package/src/browser/provided-task-configurations.spec.ts +46 -46
- package/src/browser/provided-task-configurations.ts +213 -213
- package/src/browser/quick-open-task.ts +831 -827
- package/src/browser/style/index.css +19 -19
- package/src/browser/task-configuration-manager.ts +256 -256
- package/src/browser/task-configuration-model.ts +101 -101
- package/src/browser/task-configurations.ts +508 -508
- package/src/browser/task-contribution.ts +266 -266
- package/src/browser/task-definition-registry.spec.ts +203 -203
- package/src/browser/task-definition-registry.ts +131 -131
- package/src/browser/task-frontend-contribution.ts +402 -402
- package/src/browser/task-frontend-module.ts +86 -86
- package/src/browser/task-name-resolver.ts +55 -55
- package/src/browser/task-node.ts +37 -37
- package/src/browser/task-preferences.ts +40 -40
- package/src/browser/task-problem-matcher-registry.ts +308 -308
- package/src/browser/task-problem-pattern-registry.ts +196 -196
- package/src/browser/task-schema-updater.ts +701 -701
- package/src/browser/task-service.ts +1164 -1164
- package/src/browser/task-source-resolver.ts +36 -36
- package/src/browser/task-templates.ts +168 -168
- package/src/browser/task-terminal-widget-manager.ts +224 -224
- package/src/browser/tasks-monaco-contribution.ts +27 -27
- package/src/common/index.ts +20 -20
- package/src/common/problem-matcher-protocol.ts +234 -234
- package/src/common/process/task-protocol.ts +97 -97
- package/src/common/task-common-module.ts +34 -34
- package/src/common/task-protocol.ts +317 -317
- package/src/common/task-util.ts +43 -43
- package/src/common/task-watcher.ts +78 -78
- package/src/node/custom/custom-task-runner-backend-module.ts +37 -37
- package/src/node/custom/custom-task-runner-contribution.ts +30 -30
- package/src/node/custom/custom-task-runner.ts +60 -60
- package/src/node/custom/custom-task.ts +73 -73
- package/src/node/index.ts +19 -19
- package/src/node/process/process-task-runner-backend-module.ts +37 -37
- package/src/node/process/process-task-runner-contribution.ts +31 -31
- package/src/node/process/process-task-runner.ts +371 -371
- package/src/node/process/process-task.spec.ts +30 -30
- package/src/node/process/process-task.ts +144 -144
- package/src/node/task-abstract-line-matcher.ts +312 -312
- package/src/node/task-backend-application-contribution.ts +36 -36
- package/src/node/task-backend-module.ts +57 -57
- package/src/node/task-line-matchers.ts +127 -127
- package/src/node/task-manager.ts +129 -129
- package/src/node/task-problem-collector.spec.ts +338 -338
- package/src/node/task-problem-collector.ts +62 -62
- package/src/node/task-runner-protocol.ts +33 -33
- package/src/node/task-runner.ts +96 -96
- package/src/node/task-server.slow-spec.ts +444 -444
- package/src/node/task-server.ts +263 -263
- package/src/node/task.ts +103 -103
- package/src/node/test/task-test-container.ts +63 -63
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2019 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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
exports.TaskDefinitionRegistry = void 0;
|
|
25
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
26
|
-
const coreutils_1 = require("@theia/core/shared/@phosphor/coreutils");
|
|
27
|
-
const common_1 = require("@theia/core/lib/common");
|
|
28
|
-
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
29
|
-
let TaskDefinitionRegistry = class TaskDefinitionRegistry {
|
|
30
|
-
constructor() {
|
|
31
|
-
// task type - array of task definitions
|
|
32
|
-
this.definitions = new Map();
|
|
33
|
-
this.onDidRegisterTaskDefinitionEmitter = new common_1.Emitter();
|
|
34
|
-
this.onDidUnregisterTaskDefinitionEmitter = new common_1.Emitter();
|
|
35
|
-
}
|
|
36
|
-
get onDidRegisterTaskDefinition() {
|
|
37
|
-
return this.onDidRegisterTaskDefinitionEmitter.event;
|
|
38
|
-
}
|
|
39
|
-
get onDidUnregisterTaskDefinition() {
|
|
40
|
-
return this.onDidUnregisterTaskDefinitionEmitter.event;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns all task definitions that are registered
|
|
44
|
-
* @return the task definitions that are registered
|
|
45
|
-
*/
|
|
46
|
-
getAll() {
|
|
47
|
-
const all = [];
|
|
48
|
-
for (const definitions of this.definitions.values()) {
|
|
49
|
-
all.push(...definitions);
|
|
50
|
-
}
|
|
51
|
-
return all;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Finds the task definition(s) from the registry with the given `taskType`.
|
|
55
|
-
*
|
|
56
|
-
* @param taskType the type of the task
|
|
57
|
-
* @return an array of the task definitions. If no task definitions are found, an empty array is returned.
|
|
58
|
-
*/
|
|
59
|
-
getDefinitions(taskType) {
|
|
60
|
-
return this.definitions.get(taskType) || [];
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Finds the task definition from the registry for the task configuration.
|
|
64
|
-
* The task configuration is considered as a "match" to the task definition if it has all the `required` properties.
|
|
65
|
-
* In case that more than one task definition is found, return the one that has the biggest number of matched properties.
|
|
66
|
-
*
|
|
67
|
-
* @param taskConfiguration the task configuration
|
|
68
|
-
* @return the task definition for the task configuration. If the task definition is not found, `undefined` is returned.
|
|
69
|
-
*/
|
|
70
|
-
getDefinition(taskConfiguration) {
|
|
71
|
-
const definitions = this.getDefinitions(taskConfiguration.type);
|
|
72
|
-
let matchedDefinition;
|
|
73
|
-
let highest = -1;
|
|
74
|
-
for (const def of definitions) {
|
|
75
|
-
const required = def.properties.required || [];
|
|
76
|
-
if (!required.every(requiredProp => taskConfiguration[requiredProp] !== undefined)) {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
let score = required.length; // number of required properties
|
|
80
|
-
const requiredProps = new Set(required);
|
|
81
|
-
// number of optional properties
|
|
82
|
-
score += def.properties.all.filter(p => !requiredProps.has(p) && taskConfiguration[p] !== undefined).length;
|
|
83
|
-
if (score > highest) {
|
|
84
|
-
highest = score;
|
|
85
|
-
matchedDefinition = def;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return matchedDefinition;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Add a task definition to the registry.
|
|
92
|
-
*
|
|
93
|
-
* @param definition the task definition to be added.
|
|
94
|
-
*/
|
|
95
|
-
register(definition) {
|
|
96
|
-
const taskType = definition.taskType;
|
|
97
|
-
const definitions = this.definitions.get(taskType) || [];
|
|
98
|
-
definitions.push(definition);
|
|
99
|
-
this.definitions.set(taskType, definitions);
|
|
100
|
-
this.onDidRegisterTaskDefinitionEmitter.fire(undefined);
|
|
101
|
-
return disposable_1.Disposable.create(() => {
|
|
102
|
-
const index = definitions.indexOf(definition);
|
|
103
|
-
if (index !== -1) {
|
|
104
|
-
definitions.splice(index, 1);
|
|
105
|
-
}
|
|
106
|
-
this.onDidUnregisterTaskDefinitionEmitter.fire(undefined);
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
compareTasks(one, other) {
|
|
110
|
-
const oneType = one.type;
|
|
111
|
-
const otherType = other.type;
|
|
112
|
-
if (oneType !== otherType) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
if (one['taskType'] !== other['taskType']) {
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
const def = this.getDefinition(one);
|
|
119
|
-
if (def) {
|
|
120
|
-
// scope is either a string or an enum value. Anyway...they must exactly match
|
|
121
|
-
// "_scope" may hold the Uri to the associated workspace whereas
|
|
122
|
-
// "scope" reflects the original TaskConfigurationScope as provided by plugins,
|
|
123
|
-
// Matching "_scope" or "scope" are both accepted in order to correlate provided task
|
|
124
|
-
// configurations (e.g. TaskScope.Workspace) against already configured tasks.
|
|
125
|
-
return def.properties.all.every(p => p === 'type' || coreutils_1.JSONExt.deepEqual(one[p], other[p]))
|
|
126
|
-
&& (one._scope === other._scope || one.scope === other.scope);
|
|
127
|
-
}
|
|
128
|
-
return one.label === other.label && one._source === other._source;
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
TaskDefinitionRegistry = __decorate([
|
|
132
|
-
(0, inversify_1.injectable)()
|
|
133
|
-
], TaskDefinitionRegistry);
|
|
134
|
-
exports.TaskDefinitionRegistry = TaskDefinitionRegistry;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2019 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.TaskDefinitionRegistry = void 0;
|
|
25
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
26
|
+
const coreutils_1 = require("@theia/core/shared/@phosphor/coreutils");
|
|
27
|
+
const common_1 = require("@theia/core/lib/common");
|
|
28
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
29
|
+
let TaskDefinitionRegistry = class TaskDefinitionRegistry {
|
|
30
|
+
constructor() {
|
|
31
|
+
// task type - array of task definitions
|
|
32
|
+
this.definitions = new Map();
|
|
33
|
+
this.onDidRegisterTaskDefinitionEmitter = new common_1.Emitter();
|
|
34
|
+
this.onDidUnregisterTaskDefinitionEmitter = new common_1.Emitter();
|
|
35
|
+
}
|
|
36
|
+
get onDidRegisterTaskDefinition() {
|
|
37
|
+
return this.onDidRegisterTaskDefinitionEmitter.event;
|
|
38
|
+
}
|
|
39
|
+
get onDidUnregisterTaskDefinition() {
|
|
40
|
+
return this.onDidUnregisterTaskDefinitionEmitter.event;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns all task definitions that are registered
|
|
44
|
+
* @return the task definitions that are registered
|
|
45
|
+
*/
|
|
46
|
+
getAll() {
|
|
47
|
+
const all = [];
|
|
48
|
+
for (const definitions of this.definitions.values()) {
|
|
49
|
+
all.push(...definitions);
|
|
50
|
+
}
|
|
51
|
+
return all;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Finds the task definition(s) from the registry with the given `taskType`.
|
|
55
|
+
*
|
|
56
|
+
* @param taskType the type of the task
|
|
57
|
+
* @return an array of the task definitions. If no task definitions are found, an empty array is returned.
|
|
58
|
+
*/
|
|
59
|
+
getDefinitions(taskType) {
|
|
60
|
+
return this.definitions.get(taskType) || [];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Finds the task definition from the registry for the task configuration.
|
|
64
|
+
* The task configuration is considered as a "match" to the task definition if it has all the `required` properties.
|
|
65
|
+
* In case that more than one task definition is found, return the one that has the biggest number of matched properties.
|
|
66
|
+
*
|
|
67
|
+
* @param taskConfiguration the task configuration
|
|
68
|
+
* @return the task definition for the task configuration. If the task definition is not found, `undefined` is returned.
|
|
69
|
+
*/
|
|
70
|
+
getDefinition(taskConfiguration) {
|
|
71
|
+
const definitions = this.getDefinitions(taskConfiguration.type);
|
|
72
|
+
let matchedDefinition;
|
|
73
|
+
let highest = -1;
|
|
74
|
+
for (const def of definitions) {
|
|
75
|
+
const required = def.properties.required || [];
|
|
76
|
+
if (!required.every(requiredProp => taskConfiguration[requiredProp] !== undefined)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
let score = required.length; // number of required properties
|
|
80
|
+
const requiredProps = new Set(required);
|
|
81
|
+
// number of optional properties
|
|
82
|
+
score += def.properties.all.filter(p => !requiredProps.has(p) && taskConfiguration[p] !== undefined).length;
|
|
83
|
+
if (score > highest) {
|
|
84
|
+
highest = score;
|
|
85
|
+
matchedDefinition = def;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return matchedDefinition;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Add a task definition to the registry.
|
|
92
|
+
*
|
|
93
|
+
* @param definition the task definition to be added.
|
|
94
|
+
*/
|
|
95
|
+
register(definition) {
|
|
96
|
+
const taskType = definition.taskType;
|
|
97
|
+
const definitions = this.definitions.get(taskType) || [];
|
|
98
|
+
definitions.push(definition);
|
|
99
|
+
this.definitions.set(taskType, definitions);
|
|
100
|
+
this.onDidRegisterTaskDefinitionEmitter.fire(undefined);
|
|
101
|
+
return disposable_1.Disposable.create(() => {
|
|
102
|
+
const index = definitions.indexOf(definition);
|
|
103
|
+
if (index !== -1) {
|
|
104
|
+
definitions.splice(index, 1);
|
|
105
|
+
}
|
|
106
|
+
this.onDidUnregisterTaskDefinitionEmitter.fire(undefined);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
compareTasks(one, other) {
|
|
110
|
+
const oneType = one.type;
|
|
111
|
+
const otherType = other.type;
|
|
112
|
+
if (oneType !== otherType) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
if (one['taskType'] !== other['taskType']) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
const def = this.getDefinition(one);
|
|
119
|
+
if (def) {
|
|
120
|
+
// scope is either a string or an enum value. Anyway...they must exactly match
|
|
121
|
+
// "_scope" may hold the Uri to the associated workspace whereas
|
|
122
|
+
// "scope" reflects the original TaskConfigurationScope as provided by plugins,
|
|
123
|
+
// Matching "_scope" or "scope" are both accepted in order to correlate provided task
|
|
124
|
+
// configurations (e.g. TaskScope.Workspace) against already configured tasks.
|
|
125
|
+
return def.properties.all.every(p => p === 'type' || coreutils_1.JSONExt.deepEqual(one[p], other[p]))
|
|
126
|
+
&& (one._scope === other._scope || one.scope === other.scope);
|
|
127
|
+
}
|
|
128
|
+
return one.label === other.label && one._source === other._source;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
TaskDefinitionRegistry = __decorate([
|
|
132
|
+
(0, inversify_1.injectable)()
|
|
133
|
+
], TaskDefinitionRegistry);
|
|
134
|
+
exports.TaskDefinitionRegistry = TaskDefinitionRegistry;
|
|
135
135
|
//# sourceMappingURL=task-definition-registry.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=task-definition-registry.spec.d.ts.map
|
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2019 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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
const chai_1 = require("chai");
|
|
19
|
-
const common_1 = require("../common");
|
|
20
|
-
const task_definition_registry_1 = require("./task-definition-registry");
|
|
21
|
-
describe('TaskDefinitionRegistry', () => {
|
|
22
|
-
let registry;
|
|
23
|
-
const definitionContributionA = {
|
|
24
|
-
taskType: 'extA',
|
|
25
|
-
source: 'extA',
|
|
26
|
-
properties: {
|
|
27
|
-
required: ['extensionType'],
|
|
28
|
-
all: ['extensionType', 'taskLabel'],
|
|
29
|
-
schema: {
|
|
30
|
-
type: 'object',
|
|
31
|
-
required: ['extensionType'],
|
|
32
|
-
properties: {
|
|
33
|
-
type: { const: 'extA' },
|
|
34
|
-
extensionType: {},
|
|
35
|
-
taskLabel: {}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
const definitionContributionB = {
|
|
41
|
-
taskType: 'extA',
|
|
42
|
-
source: 'extA',
|
|
43
|
-
properties: {
|
|
44
|
-
required: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
45
|
-
all: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
46
|
-
schema: {
|
|
47
|
-
type: 'object',
|
|
48
|
-
required: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
49
|
-
properties: {
|
|
50
|
-
type: { const: 'extA' },
|
|
51
|
-
extensionType: {},
|
|
52
|
-
taskLabel: {},
|
|
53
|
-
taskDetailedLabel: {}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
const FAKE_TASK_META = {
|
|
59
|
-
TYPE: 'foobar_type',
|
|
60
|
-
SRC: 'foobar_src'
|
|
61
|
-
};
|
|
62
|
-
const defaultPresentation = {
|
|
63
|
-
clear: false,
|
|
64
|
-
echo: true,
|
|
65
|
-
focus: false,
|
|
66
|
-
panel: common_1.PanelKind.Shared,
|
|
67
|
-
reveal: common_1.RevealKind.Always,
|
|
68
|
-
showReuseMessage: true,
|
|
69
|
-
};
|
|
70
|
-
const fakeTaskDefinition = {
|
|
71
|
-
taskType: FAKE_TASK_META.TYPE,
|
|
72
|
-
source: FAKE_TASK_META.SRC,
|
|
73
|
-
properties: {
|
|
74
|
-
required: ['strArg'],
|
|
75
|
-
all: ['strArg', 'arrArgs'],
|
|
76
|
-
schema: {
|
|
77
|
-
type: 'object',
|
|
78
|
-
required: ['strArg'],
|
|
79
|
-
properties: {
|
|
80
|
-
type: { const: FAKE_TASK_META.TYPE },
|
|
81
|
-
strArg: {},
|
|
82
|
-
arrArgs: {}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const configureFakeTask = (executionId = 'foobar', type = FAKE_TASK_META.TYPE, _source = FAKE_TASK_META.SRC, arrArgs = [], strArg = '', label = 'foobar', presentation = defaultPresentation, problemMatcher = undefined, taskType = 'customExecution', _scope = common_1.TaskScope.Workspace) => ({
|
|
88
|
-
executionId, arrArgs, strArg, label, presentation,
|
|
89
|
-
problemMatcher, taskType, type, _scope, _source,
|
|
90
|
-
});
|
|
91
|
-
beforeEach(() => {
|
|
92
|
-
registry = new task_definition_registry_1.TaskDefinitionRegistry();
|
|
93
|
-
});
|
|
94
|
-
describe('register function', () => {
|
|
95
|
-
it('should transform the task definition contribution and store it in memory', () => {
|
|
96
|
-
registry.register(definitionContributionA);
|
|
97
|
-
(0, chai_1.expect)(registry['definitions'].get(definitionContributionA.taskType)).to.be.ok;
|
|
98
|
-
(0, chai_1.expect)(registry['definitions'].get(definitionContributionA.taskType)[0]).to.deep.equal(definitionContributionA);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('getDefinitions function', () => {
|
|
102
|
-
it('should return all definitions associated with the given type', () => {
|
|
103
|
-
registry.register(definitionContributionA);
|
|
104
|
-
const defs1 = registry.getDefinitions(definitionContributionA.taskType);
|
|
105
|
-
(0, chai_1.expect)(defs1.length).to.eq(1);
|
|
106
|
-
registry.register(definitionContributionB);
|
|
107
|
-
const defs2 = registry.getDefinitions(definitionContributionA.taskType);
|
|
108
|
-
(0, chai_1.expect)(defs2.length).to.eq(2);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
describe('getDefinition function', () => {
|
|
112
|
-
it('should return undefined if the given task configuration does not match any registered definitions', () => {
|
|
113
|
-
registry.register(definitionContributionA);
|
|
114
|
-
registry.register(definitionContributionB);
|
|
115
|
-
const defs = registry.getDefinition({
|
|
116
|
-
type: definitionContributionA.taskType, label: 'grunt task', task: 'build'
|
|
117
|
-
});
|
|
118
|
-
(0, chai_1.expect)(defs).to.be.not.ok;
|
|
119
|
-
});
|
|
120
|
-
it('should return the best match if there is one or more registered definitions match the given task configuration', () => {
|
|
121
|
-
registry.register(definitionContributionA);
|
|
122
|
-
registry.register(definitionContributionB);
|
|
123
|
-
const defs = registry.getDefinition({
|
|
124
|
-
type: definitionContributionA.taskType, label: 'extension task', extensionType: 'extensionType', taskLabel: 'taskLabel'
|
|
125
|
-
});
|
|
126
|
-
(0, chai_1.expect)(defs).to.be.ok;
|
|
127
|
-
(0, chai_1.expect)(defs.taskType).to.be.eq(definitionContributionA.taskType);
|
|
128
|
-
const defs2 = registry.getDefinition({
|
|
129
|
-
type: definitionContributionA.taskType, label: 'extension task', extensionType: 'extensionType', taskLabel: 'taskLabel', taskDetailedLabel: 'taskDetailedLabel'
|
|
130
|
-
});
|
|
131
|
-
(0, chai_1.expect)(defs2).to.be.ok;
|
|
132
|
-
(0, chai_1.expect)(defs2.taskType).to.be.eq(definitionContributionB.taskType);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('compareTasks function', () => {
|
|
136
|
-
beforeEach(() => registry.register(fakeTaskDefinition));
|
|
137
|
-
it('should return false if given 2 task configurations with different type', () => {
|
|
138
|
-
const areSameTasks = registry.compareTasks(configureFakeTask('id_1', 'type_1'), configureFakeTask('id_2', 'type_2'));
|
|
139
|
-
(0, chai_1.expect)(areSameTasks).to.be.false;
|
|
140
|
-
});
|
|
141
|
-
it('should return true if given 2 same task configurations with empty arrays (different by reference) as custom property', () => {
|
|
142
|
-
const areSameTasks = registry.compareTasks(configureFakeTask('id_1'), configureFakeTask('id_2'));
|
|
143
|
-
(0, chai_1.expect)(areSameTasks).to.be.true;
|
|
144
|
-
});
|
|
145
|
-
it('should return true if given 2 same task configurations with deep properties (different by reference)', () => {
|
|
146
|
-
const areSameTasks = registry.compareTasks(configureFakeTask('id_1', undefined, undefined, [1, '2', { '3': { a: true, b: 'string' } }]), configureFakeTask('id_2', undefined, undefined, [1, '2', { '3': { a: true, b: 'string' } }]));
|
|
147
|
-
(0, chai_1.expect)(areSameTasks).to.be.true;
|
|
148
|
-
});
|
|
149
|
-
it('should return false if given 2 task configurations with different deep properties', () => {
|
|
150
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
|
-
const inputs = [
|
|
152
|
-
[
|
|
153
|
-
configureFakeTask('id_1', undefined, undefined, [1, '2', { '3': { a: true, b: 'b' } }]),
|
|
154
|
-
configureFakeTask('id_2', undefined, undefined, [1, '2', { '3': { a: true } }]),
|
|
155
|
-
],
|
|
156
|
-
[
|
|
157
|
-
configureFakeTask('id_1', undefined, undefined, [1, '2']),
|
|
158
|
-
configureFakeTask('id_2', undefined, undefined, [1, 2]),
|
|
159
|
-
],
|
|
160
|
-
[
|
|
161
|
-
// eslint-disable-next-line no-null/no-null
|
|
162
|
-
configureFakeTask('id_1', undefined, undefined, [1, '2', { c: null }]),
|
|
163
|
-
configureFakeTask('id_2', undefined, undefined, [1, '2', { c: undefined }]),
|
|
164
|
-
],
|
|
165
|
-
];
|
|
166
|
-
const allAreFalse = inputs.map(args => registry.compareTasks(...args)).every(areSameTasks => areSameTasks === false);
|
|
167
|
-
(0, chai_1.expect)(allAreFalse).to.be.true;
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2019 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const chai_1 = require("chai");
|
|
19
|
+
const common_1 = require("../common");
|
|
20
|
+
const task_definition_registry_1 = require("./task-definition-registry");
|
|
21
|
+
describe('TaskDefinitionRegistry', () => {
|
|
22
|
+
let registry;
|
|
23
|
+
const definitionContributionA = {
|
|
24
|
+
taskType: 'extA',
|
|
25
|
+
source: 'extA',
|
|
26
|
+
properties: {
|
|
27
|
+
required: ['extensionType'],
|
|
28
|
+
all: ['extensionType', 'taskLabel'],
|
|
29
|
+
schema: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
required: ['extensionType'],
|
|
32
|
+
properties: {
|
|
33
|
+
type: { const: 'extA' },
|
|
34
|
+
extensionType: {},
|
|
35
|
+
taskLabel: {}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const definitionContributionB = {
|
|
41
|
+
taskType: 'extA',
|
|
42
|
+
source: 'extA',
|
|
43
|
+
properties: {
|
|
44
|
+
required: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
45
|
+
all: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
46
|
+
schema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
required: ['extensionType', 'taskLabel', 'taskDetailedLabel'],
|
|
49
|
+
properties: {
|
|
50
|
+
type: { const: 'extA' },
|
|
51
|
+
extensionType: {},
|
|
52
|
+
taskLabel: {},
|
|
53
|
+
taskDetailedLabel: {}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const FAKE_TASK_META = {
|
|
59
|
+
TYPE: 'foobar_type',
|
|
60
|
+
SRC: 'foobar_src'
|
|
61
|
+
};
|
|
62
|
+
const defaultPresentation = {
|
|
63
|
+
clear: false,
|
|
64
|
+
echo: true,
|
|
65
|
+
focus: false,
|
|
66
|
+
panel: common_1.PanelKind.Shared,
|
|
67
|
+
reveal: common_1.RevealKind.Always,
|
|
68
|
+
showReuseMessage: true,
|
|
69
|
+
};
|
|
70
|
+
const fakeTaskDefinition = {
|
|
71
|
+
taskType: FAKE_TASK_META.TYPE,
|
|
72
|
+
source: FAKE_TASK_META.SRC,
|
|
73
|
+
properties: {
|
|
74
|
+
required: ['strArg'],
|
|
75
|
+
all: ['strArg', 'arrArgs'],
|
|
76
|
+
schema: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
required: ['strArg'],
|
|
79
|
+
properties: {
|
|
80
|
+
type: { const: FAKE_TASK_META.TYPE },
|
|
81
|
+
strArg: {},
|
|
82
|
+
arrArgs: {}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const configureFakeTask = (executionId = 'foobar', type = FAKE_TASK_META.TYPE, _source = FAKE_TASK_META.SRC, arrArgs = [], strArg = '', label = 'foobar', presentation = defaultPresentation, problemMatcher = undefined, taskType = 'customExecution', _scope = common_1.TaskScope.Workspace) => ({
|
|
88
|
+
executionId, arrArgs, strArg, label, presentation,
|
|
89
|
+
problemMatcher, taskType, type, _scope, _source,
|
|
90
|
+
});
|
|
91
|
+
beforeEach(() => {
|
|
92
|
+
registry = new task_definition_registry_1.TaskDefinitionRegistry();
|
|
93
|
+
});
|
|
94
|
+
describe('register function', () => {
|
|
95
|
+
it('should transform the task definition contribution and store it in memory', () => {
|
|
96
|
+
registry.register(definitionContributionA);
|
|
97
|
+
(0, chai_1.expect)(registry['definitions'].get(definitionContributionA.taskType)).to.be.ok;
|
|
98
|
+
(0, chai_1.expect)(registry['definitions'].get(definitionContributionA.taskType)[0]).to.deep.equal(definitionContributionA);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('getDefinitions function', () => {
|
|
102
|
+
it('should return all definitions associated with the given type', () => {
|
|
103
|
+
registry.register(definitionContributionA);
|
|
104
|
+
const defs1 = registry.getDefinitions(definitionContributionA.taskType);
|
|
105
|
+
(0, chai_1.expect)(defs1.length).to.eq(1);
|
|
106
|
+
registry.register(definitionContributionB);
|
|
107
|
+
const defs2 = registry.getDefinitions(definitionContributionA.taskType);
|
|
108
|
+
(0, chai_1.expect)(defs2.length).to.eq(2);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('getDefinition function', () => {
|
|
112
|
+
it('should return undefined if the given task configuration does not match any registered definitions', () => {
|
|
113
|
+
registry.register(definitionContributionA);
|
|
114
|
+
registry.register(definitionContributionB);
|
|
115
|
+
const defs = registry.getDefinition({
|
|
116
|
+
type: definitionContributionA.taskType, label: 'grunt task', task: 'build'
|
|
117
|
+
});
|
|
118
|
+
(0, chai_1.expect)(defs).to.be.not.ok;
|
|
119
|
+
});
|
|
120
|
+
it('should return the best match if there is one or more registered definitions match the given task configuration', () => {
|
|
121
|
+
registry.register(definitionContributionA);
|
|
122
|
+
registry.register(definitionContributionB);
|
|
123
|
+
const defs = registry.getDefinition({
|
|
124
|
+
type: definitionContributionA.taskType, label: 'extension task', extensionType: 'extensionType', taskLabel: 'taskLabel'
|
|
125
|
+
});
|
|
126
|
+
(0, chai_1.expect)(defs).to.be.ok;
|
|
127
|
+
(0, chai_1.expect)(defs.taskType).to.be.eq(definitionContributionA.taskType);
|
|
128
|
+
const defs2 = registry.getDefinition({
|
|
129
|
+
type: definitionContributionA.taskType, label: 'extension task', extensionType: 'extensionType', taskLabel: 'taskLabel', taskDetailedLabel: 'taskDetailedLabel'
|
|
130
|
+
});
|
|
131
|
+
(0, chai_1.expect)(defs2).to.be.ok;
|
|
132
|
+
(0, chai_1.expect)(defs2.taskType).to.be.eq(definitionContributionB.taskType);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('compareTasks function', () => {
|
|
136
|
+
beforeEach(() => registry.register(fakeTaskDefinition));
|
|
137
|
+
it('should return false if given 2 task configurations with different type', () => {
|
|
138
|
+
const areSameTasks = registry.compareTasks(configureFakeTask('id_1', 'type_1'), configureFakeTask('id_2', 'type_2'));
|
|
139
|
+
(0, chai_1.expect)(areSameTasks).to.be.false;
|
|
140
|
+
});
|
|
141
|
+
it('should return true if given 2 same task configurations with empty arrays (different by reference) as custom property', () => {
|
|
142
|
+
const areSameTasks = registry.compareTasks(configureFakeTask('id_1'), configureFakeTask('id_2'));
|
|
143
|
+
(0, chai_1.expect)(areSameTasks).to.be.true;
|
|
144
|
+
});
|
|
145
|
+
it('should return true if given 2 same task configurations with deep properties (different by reference)', () => {
|
|
146
|
+
const areSameTasks = registry.compareTasks(configureFakeTask('id_1', undefined, undefined, [1, '2', { '3': { a: true, b: 'string' } }]), configureFakeTask('id_2', undefined, undefined, [1, '2', { '3': { a: true, b: 'string' } }]));
|
|
147
|
+
(0, chai_1.expect)(areSameTasks).to.be.true;
|
|
148
|
+
});
|
|
149
|
+
it('should return false if given 2 task configurations with different deep properties', () => {
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
|
+
const inputs = [
|
|
152
|
+
[
|
|
153
|
+
configureFakeTask('id_1', undefined, undefined, [1, '2', { '3': { a: true, b: 'b' } }]),
|
|
154
|
+
configureFakeTask('id_2', undefined, undefined, [1, '2', { '3': { a: true } }]),
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
configureFakeTask('id_1', undefined, undefined, [1, '2']),
|
|
158
|
+
configureFakeTask('id_2', undefined, undefined, [1, 2]),
|
|
159
|
+
],
|
|
160
|
+
[
|
|
161
|
+
// eslint-disable-next-line no-null/no-null
|
|
162
|
+
configureFakeTask('id_1', undefined, undefined, [1, '2', { c: null }]),
|
|
163
|
+
configureFakeTask('id_2', undefined, undefined, [1, '2', { c: undefined }]),
|
|
164
|
+
],
|
|
165
|
+
];
|
|
166
|
+
const allAreFalse = inputs.map(args => registry.compareTasks(...args)).every(areSameTasks => areSameTasks === false);
|
|
167
|
+
(0, chai_1.expect)(allAreFalse).to.be.true;
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
171
|
//# sourceMappingURL=task-definition-registry.spec.js.map
|