@elisra-devops/docgen-data-provider 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/helpers/helper.js +22 -7
- package/bin/helpers/helper.js.map +1 -1
- package/bin/helpers/tfs.js +62 -77
- package/bin/helpers/tfs.js.map +1 -1
- package/bin/index.d.ts +3 -1
- package/bin/index.js +17 -31
- package/bin/index.js.map +1 -1
- package/bin/models/tfs-data.d.ts +3 -3
- package/bin/models/tfs-data.js +54 -17
- package/bin/models/tfs-data.js.map +1 -1
- package/bin/modules/GitDataProvider.js +213 -259
- package/bin/modules/GitDataProvider.js.map +1 -1
- package/bin/modules/MangementDataProvider.js +26 -43
- package/bin/modules/MangementDataProvider.js.map +1 -1
- package/bin/modules/PipelinesDataProvider.js +57 -82
- package/bin/modules/PipelinesDataProvider.js.map +1 -1
- package/bin/modules/ResultDataProvider.d.ts +89 -0
- package/bin/modules/ResultDataProvider.js +409 -0
- package/bin/modules/ResultDataProvider.js.map +1 -0
- package/bin/modules/TestDataProvider.js +196 -236
- package/bin/modules/TestDataProvider.js.map +1 -1
- package/bin/modules/TicketsDataProvider.js +259 -300
- package/bin/modules/TicketsDataProvider.js.map +1 -1
- package/bin/modules/test/gitDataProvider.test.js +67 -76
- package/bin/modules/test/gitDataProvider.test.js.map +1 -1
- package/bin/modules/test/managmentDataProvider.test.js +16 -25
- package/bin/modules/test/managmentDataProvider.test.js.map +1 -1
- package/bin/modules/test/pipelineDataProvider.test.js +32 -41
- package/bin/modules/test/pipelineDataProvider.test.js.map +1 -1
- package/bin/modules/test/testDataProvider.test.js +56 -65
- package/bin/modules/test/testDataProvider.test.js.map +1 -1
- package/bin/modules/test/ticketsDataProvider.test.js +39 -48
- package/bin/modules/test/ticketsDataProvider.test.js.map +1 -1
- package/package.json +17 -11
- package/src/index.ts +19 -15
- package/src/modules/ResultDataProvider.ts +496 -0
- package/src/modules/TestDataProvider.ts +1 -0
- package/tsconfig.json +2 -2
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const tfs_1 = require("../helpers/tfs");
|
|
13
4
|
const tfs_data_1 = require("../models/tfs-data");
|
|
@@ -19,118 +10,106 @@ const tfs_data_5 = require("../models/tfs-data");
|
|
|
19
10
|
const tfs_data_6 = require("../models/tfs-data");
|
|
20
11
|
const logger_1 = require("../utils/logger");
|
|
21
12
|
class TicketsDataProvider {
|
|
13
|
+
orgUrl = "";
|
|
14
|
+
token = "";
|
|
15
|
+
queriesList = new Array();
|
|
22
16
|
constructor(orgUrl, token) {
|
|
23
|
-
this.orgUrl = "";
|
|
24
|
-
this.token = "";
|
|
25
|
-
this.queriesList = new Array();
|
|
26
17
|
this.orgUrl = orgUrl;
|
|
27
18
|
this.token = token;
|
|
28
19
|
}
|
|
29
|
-
GetWorkItem(project, id) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return tfs_1.TFSServices.getItemContent(url, this.token);
|
|
33
|
-
});
|
|
20
|
+
async GetWorkItem(project, id) {
|
|
21
|
+
let url = `${this.orgUrl}${project}/_apis/wit/workitems/${id}?$expand=All`;
|
|
22
|
+
return tfs_1.TFSServices.getItemContent(url, this.token);
|
|
34
23
|
}
|
|
35
|
-
GetLinksByIds(project, ids) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
traceItem.links = yield this.GetLinks(project, wis[i], relations);
|
|
47
|
-
}
|
|
48
|
-
trace.push(traceItem);
|
|
24
|
+
async GetLinksByIds(project, ids) {
|
|
25
|
+
var trace = new Array();
|
|
26
|
+
let wis = await this.PopulateWorkItemsByIds(ids, project);
|
|
27
|
+
let linksMap = await this.GetRelationsIds(wis);
|
|
28
|
+
let relations;
|
|
29
|
+
for (let i = 0; i < wis.length; i++) {
|
|
30
|
+
let traceItem; //= new Trace();
|
|
31
|
+
traceItem = await this.GetParentLink(project, wis[i]);
|
|
32
|
+
if (linksMap.get(wis[i].id).rels.length > 0) {
|
|
33
|
+
relations = await this.PopulateWorkItemsByIds(linksMap.get(wis[i].id).rels, project);
|
|
34
|
+
traceItem.links = await this.GetLinks(project, wis[i], relations);
|
|
49
35
|
}
|
|
50
|
-
|
|
51
|
-
}
|
|
36
|
+
trace.push(traceItem);
|
|
37
|
+
}
|
|
38
|
+
return trace;
|
|
52
39
|
}
|
|
53
|
-
GetParentLink(project, wi) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
trace.customerId = wi.fields["System.CustomerId"];
|
|
63
|
-
}
|
|
40
|
+
async GetParentLink(project, wi) {
|
|
41
|
+
let trace = new helper_1.Trace();
|
|
42
|
+
if (wi != null) {
|
|
43
|
+
trace.id = wi.id;
|
|
44
|
+
trace.title = wi.fields["System.Title"];
|
|
45
|
+
trace.url = this.orgUrl + project + "/_workitems/edit/" + wi.id;
|
|
46
|
+
if (wi.fields["System.CustomerId"] != null &&
|
|
47
|
+
wi.fields["System.CustomerId"] != undefined) {
|
|
48
|
+
trace.customerId = wi.fields["System.CustomerId"];
|
|
64
49
|
}
|
|
65
|
-
|
|
66
|
-
|
|
50
|
+
}
|
|
51
|
+
return trace;
|
|
67
52
|
}
|
|
68
|
-
GetRelationsIds(ids) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
link.rels.push(id);
|
|
81
|
-
}
|
|
53
|
+
async GetRelationsIds(ids) {
|
|
54
|
+
let rel = new Map();
|
|
55
|
+
try {
|
|
56
|
+
for (let i = 0; i < ids.length; i++) {
|
|
57
|
+
var link = new helper_1.Relations();
|
|
58
|
+
link.id = ids[i].id;
|
|
59
|
+
if (ids[i].relations != null)
|
|
60
|
+
for (let j = 0; j < ids[i].relations.length; j++) {
|
|
61
|
+
if (ids[i].relations[j].rel != "AttachedFile") {
|
|
62
|
+
let index = ids[i].relations[j].url.lastIndexOf("/");
|
|
63
|
+
let id = ids[i].relations[j].url.substring(index + 1);
|
|
64
|
+
link.rels.push(id);
|
|
82
65
|
}
|
|
83
|
-
|
|
84
|
-
|
|
66
|
+
}
|
|
67
|
+
rel.set(ids[i].id, link);
|
|
85
68
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
}
|
|
70
|
+
catch (e) { }
|
|
71
|
+
return rel;
|
|
89
72
|
}
|
|
90
|
-
GetLinks(project, wi, links) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
for (let
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
73
|
+
async GetLinks(project, wi, links) {
|
|
74
|
+
var linkList = new Array();
|
|
75
|
+
for (let i = 0; i < wi.relations.length; i++) {
|
|
76
|
+
for (let j = 0; j < links.length; j++) {
|
|
77
|
+
let index = wi.relations[i].url.lastIndexOf("/");
|
|
78
|
+
let linkId = wi.relations[i].url.substring(index + 1);
|
|
79
|
+
if (linkId == links[j].id) {
|
|
80
|
+
var link = new helper_1.Links();
|
|
81
|
+
link.type = wi.relations[i].rel;
|
|
82
|
+
link.id = links[j].id;
|
|
83
|
+
link.title = links[j].fields["System.Title"];
|
|
84
|
+
link.description = links[j].fields["System.Description"];
|
|
85
|
+
link.url = this.orgUrl + project + "/_workitems/edit/" + linkId;
|
|
86
|
+
linkList.push(link);
|
|
87
|
+
break;
|
|
107
88
|
}
|
|
108
89
|
}
|
|
109
|
-
|
|
110
|
-
|
|
90
|
+
}
|
|
91
|
+
return linkList;
|
|
111
92
|
}
|
|
112
93
|
// gets queries recursiv
|
|
113
|
-
GetSharedQueries(project, path) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
catch (e) { }
|
|
133
|
-
});
|
|
94
|
+
async GetSharedQueries(project, path) {
|
|
95
|
+
let url;
|
|
96
|
+
try {
|
|
97
|
+
if (path == "")
|
|
98
|
+
url = `${this.orgUrl}${project}/_apis/wit/queries/Shared%20Queries?$depth=1`;
|
|
99
|
+
else
|
|
100
|
+
url = `${this.orgUrl}${project}/_apis/wit/queries/${path}?$depth=1`;
|
|
101
|
+
let queries = await tfs_1.TFSServices.getItemContent(url, this.token);
|
|
102
|
+
for (let i = 0; i < queries.children.length; i++)
|
|
103
|
+
if (queries.children[i].isFolder) {
|
|
104
|
+
this.queriesList.push(queries.children[i]);
|
|
105
|
+
await this.GetSharedQueries(project, queries.children[i].path);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.queriesList.push(queries.children[i]);
|
|
109
|
+
}
|
|
110
|
+
return this.GetModeledQuery(this.queriesList);
|
|
111
|
+
}
|
|
112
|
+
catch (e) { }
|
|
134
113
|
}
|
|
135
114
|
// get queris structured
|
|
136
115
|
GetModeledQuery(list) {
|
|
@@ -146,170 +125,160 @@ class TicketsDataProvider {
|
|
|
146
125
|
return queryListObject;
|
|
147
126
|
}
|
|
148
127
|
// gets query results
|
|
149
|
-
GetQueryResultsByWiqlHref(wiqlHref, project) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return levelResults;
|
|
157
|
-
}
|
|
158
|
-
return modeledResult.workItems;
|
|
128
|
+
async GetQueryResultsByWiqlHref(wiqlHref, project) {
|
|
129
|
+
try {
|
|
130
|
+
let results = await tfs_1.TFSServices.getItemContent(wiqlHref, this.token);
|
|
131
|
+
let modeledResult = await this.GetModeledQueryResults(results, project);
|
|
132
|
+
if (modeledResult.queryType == "tree") {
|
|
133
|
+
let levelResults = helper_1.Helper.LevelBuilder(modeledResult, modeledResult.workItems[0].fields[0].value);
|
|
134
|
+
return levelResults;
|
|
159
135
|
}
|
|
160
|
-
|
|
161
|
-
}
|
|
136
|
+
return modeledResult.workItems;
|
|
137
|
+
}
|
|
138
|
+
catch (e) { }
|
|
162
139
|
}
|
|
163
140
|
// gets query results
|
|
164
|
-
GetQueryResultsByWiqlString(wiql, projectName) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
141
|
+
async GetQueryResultsByWiqlString(wiql, projectName) {
|
|
142
|
+
let res;
|
|
143
|
+
let url = `${this.orgUrl}${projectName}/_apis/wit/wiql?$top=2147483646&expand={all}`;
|
|
144
|
+
try {
|
|
145
|
+
res = await tfs_1.TFSServices.getItemContent(url, this.token, "post", {
|
|
146
|
+
query: wiql,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.log(error);
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
return res;
|
|
154
|
+
}
|
|
155
|
+
async GetQueryResultById(query, project) {
|
|
156
|
+
var url = `${this.orgUrl}${project}/_apis/wit/queries/${query}`;
|
|
157
|
+
let querie = await tfs_1.TFSServices.getItemContent(url, this.token);
|
|
158
|
+
var wiql = querie._links.wiql;
|
|
159
|
+
return await this.GetQueryResultsByWiqlHref(wiql.href, project);
|
|
160
|
+
}
|
|
161
|
+
async PopulateWorkItemsByIds(workItemsArray = [], projectName = "") {
|
|
162
|
+
let url = `${this.orgUrl}${projectName}/_apis/wit/workitemsbatch`;
|
|
163
|
+
let res = [];
|
|
164
|
+
let divByMax = Math.floor(workItemsArray.length / 200);
|
|
165
|
+
let modulusByMax = workItemsArray.length % 200;
|
|
166
|
+
//iterating
|
|
167
|
+
for (let i = 0; i < divByMax; i++) {
|
|
168
|
+
let from = i * 200;
|
|
169
|
+
let to = (i + 1) * 200;
|
|
170
|
+
let currentIds = workItemsArray.slice(from, to);
|
|
168
171
|
try {
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
let subRes = await tfs_1.TFSServices.getItemContent(url, this.token, "post", {
|
|
173
|
+
$expand: "Relations",
|
|
174
|
+
ids: currentIds,
|
|
171
175
|
});
|
|
176
|
+
res = [...res, ...subRes.value];
|
|
172
177
|
}
|
|
173
178
|
catch (error) {
|
|
174
|
-
|
|
179
|
+
logger_1.default.error(`error populating workitems array`);
|
|
180
|
+
logger_1.default.error(JSON.stringify(error));
|
|
175
181
|
return [];
|
|
176
182
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
183
|
+
}
|
|
184
|
+
//compliting the rimainder
|
|
185
|
+
if (modulusByMax !== 0) {
|
|
186
|
+
try {
|
|
187
|
+
let currentIds = workItemsArray.slice(workItemsArray.length - modulusByMax, workItemsArray.length);
|
|
188
|
+
let subRes = await tfs_1.TFSServices.getItemContent(url, this.token, "post", {
|
|
189
|
+
$expand: "Relations",
|
|
190
|
+
ids: currentIds,
|
|
191
|
+
});
|
|
192
|
+
res = [...res, ...subRes.value];
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
logger_1.default.error(`error populating workitems array`);
|
|
196
|
+
logger_1.default.error(JSON.stringify(error));
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
} //if
|
|
200
|
+
return res;
|
|
187
201
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
async GetModeledQueryResults(results, project) {
|
|
203
|
+
let ticketsDataProvider = new TicketsDataProvider(this.orgUrl, this.token);
|
|
204
|
+
var queryResult = new tfs_data_2.Query();
|
|
205
|
+
queryResult.asOf = results.asOf;
|
|
206
|
+
queryResult.queryResultType = results.queryResultType;
|
|
207
|
+
queryResult.queryType = results.queryType;
|
|
208
|
+
if (results.queryType == tfs_data_3.QueryType.Flat) {
|
|
209
|
+
// //Flat Query
|
|
210
|
+
//TODo: attachment
|
|
211
|
+
//TODO:check if wi.relations exist
|
|
212
|
+
//TODO: add attachment to any list from 1
|
|
213
|
+
for (var j = 0; j < results.workItems.length; j++) {
|
|
214
|
+
let wi = await ticketsDataProvider.GetWorkItem(project, results.workItems[j].id);
|
|
215
|
+
queryResult.workItems[j] = new tfs_data_1.Workitem();
|
|
216
|
+
queryResult.workItems[j].url = results.workItems[j].url;
|
|
217
|
+
queryResult.workItems[j].fields = new Array(results.columns.length);
|
|
218
|
+
if (wi.relations != null) {
|
|
219
|
+
queryResult.workItems[j].attachments = wi.relations;
|
|
205
220
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
221
|
+
var rel = new tfs_data_4.QueryAllTypes();
|
|
222
|
+
for (var i = 0; i < results.columns.length; i++) {
|
|
223
|
+
queryResult.columns[i] = new tfs_data_5.Column();
|
|
224
|
+
queryResult.workItems[j].fields[i] = new tfs_data_6.value();
|
|
225
|
+
queryResult.columns[i].name = results.columns[i].name;
|
|
226
|
+
queryResult.columns[i].referenceName =
|
|
227
|
+
results.columns[i].referenceName;
|
|
228
|
+
queryResult.columns[i].url = results.columns[i].url;
|
|
229
|
+
if (results.columns[i].referenceName.toUpperCase() == "SYSTEM.ID") {
|
|
230
|
+
queryResult.workItems[j].fields[i].value = wi.id.toString();
|
|
231
|
+
queryResult.workItems[j].fields[i].name = "ID";
|
|
232
|
+
}
|
|
233
|
+
else if (results.columns[i].referenceName.toUpperCase() ==
|
|
234
|
+
"SYSTEM.ASSIGNEDTO" &&
|
|
235
|
+
wi.fields[results.columns[i].referenceName] != null)
|
|
236
|
+
queryResult.workItems[j].fields[i].value =
|
|
237
|
+
wi.fields[results.columns[i].referenceName].displayName;
|
|
238
|
+
else {
|
|
239
|
+
let s = wi.fields[results.columns[i].referenceName];
|
|
240
|
+
queryResult.workItems[j].fields[i].value =
|
|
241
|
+
wi.fields[results.columns[i].referenceName];
|
|
242
|
+
queryResult.workItems[j].fields[i].name = results.columns[i].name;
|
|
243
|
+
}
|
|
210
244
|
}
|
|
211
245
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
});
|
|
220
|
-
res = [...res, ...subRes.value];
|
|
221
|
-
}
|
|
222
|
-
catch (error) {
|
|
223
|
-
logger_1.default.error(`error populating workitems array`);
|
|
224
|
-
logger_1.default.error(JSON.stringify(error));
|
|
225
|
-
return [];
|
|
226
|
-
}
|
|
227
|
-
} //if
|
|
228
|
-
return res;
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
GetModeledQueryResults(results, project) {
|
|
232
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
-
let ticketsDataProvider = new TicketsDataProvider(this.orgUrl, this.token);
|
|
234
|
-
var queryResult = new tfs_data_2.Query();
|
|
235
|
-
queryResult.asOf = results.asOf;
|
|
236
|
-
queryResult.queryResultType = results.queryResultType;
|
|
237
|
-
queryResult.queryType = results.queryType;
|
|
238
|
-
if (results.queryType == tfs_data_3.QueryType.Flat) {
|
|
239
|
-
// //Flat Query
|
|
240
|
-
//TODo: attachment
|
|
241
|
-
//TODO:check if wi.relations exist
|
|
242
|
-
//TODO: add attachment to any list from 1
|
|
243
|
-
for (var j = 0; j < results.workItems.length; j++) {
|
|
244
|
-
let wi = yield ticketsDataProvider.GetWorkItem(project, results.workItems[j].id);
|
|
246
|
+
} //Tree Query
|
|
247
|
+
else {
|
|
248
|
+
this.BuildColumns(results, queryResult);
|
|
249
|
+
for (var j = 0; j < results.workItemRelations.length; j++) {
|
|
250
|
+
if (results.workItemRelations[j].target != null) {
|
|
251
|
+
let wiT = await ticketsDataProvider.GetWorkItem(project, results.workItemRelations[j].target.id);
|
|
252
|
+
// var rel = new QueryAllTypes();
|
|
245
253
|
queryResult.workItems[j] = new tfs_data_1.Workitem();
|
|
246
|
-
queryResult.workItems[j].url =
|
|
254
|
+
queryResult.workItems[j].url = wiT.url;
|
|
247
255
|
queryResult.workItems[j].fields = new Array(results.columns.length);
|
|
248
|
-
if (
|
|
249
|
-
queryResult.workItems[j].attachments =
|
|
256
|
+
if (wiT.relations != null) {
|
|
257
|
+
queryResult.workItems[j].attachments = wiT.relations;
|
|
250
258
|
}
|
|
251
|
-
|
|
252
|
-
for (
|
|
253
|
-
|
|
259
|
+
// rel.q = queryResult;
|
|
260
|
+
for (i = 0; i < queryResult.columns.length; i++) {
|
|
261
|
+
//.. rel.q.workItems[j].fields[i] = new value();
|
|
254
262
|
queryResult.workItems[j].fields[i] = new tfs_data_6.value();
|
|
255
|
-
queryResult.
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
queryResult.columns[i].url = results.columns[i].url;
|
|
259
|
-
if (results.columns[i].referenceName.toUpperCase() == "SYSTEM.ID") {
|
|
260
|
-
queryResult.workItems[j].fields[i].value = wi.id.toString();
|
|
261
|
-
queryResult.workItems[j].fields[i].name = "ID";
|
|
262
|
-
}
|
|
263
|
-
else if (results.columns[i].referenceName.toUpperCase() ==
|
|
263
|
+
queryResult.workItems[j].fields[i].name =
|
|
264
|
+
queryResult.columns[i].name;
|
|
265
|
+
if (results.columns[i].referenceName.toUpperCase() ==
|
|
264
266
|
"SYSTEM.ASSIGNEDTO" &&
|
|
265
|
-
|
|
267
|
+
wiT.fields[results.columns[i].referenceName] != null)
|
|
266
268
|
queryResult.workItems[j].fields[i].value =
|
|
267
|
-
|
|
268
|
-
else
|
|
269
|
-
let s = wi.fields[results.columns[i].referenceName];
|
|
269
|
+
wiT.fields[results.columns[i].referenceName].displayName;
|
|
270
|
+
else
|
|
270
271
|
queryResult.workItems[j].fields[i].value =
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
} //Tree Query
|
|
277
|
-
else {
|
|
278
|
-
this.BuildColumns(results, queryResult);
|
|
279
|
-
for (var j = 0; j < results.workItemRelations.length; j++) {
|
|
280
|
-
if (results.workItemRelations[j].target != null) {
|
|
281
|
-
let wiT = yield ticketsDataProvider.GetWorkItem(project, results.workItemRelations[j].target.id);
|
|
282
|
-
// var rel = new QueryAllTypes();
|
|
283
|
-
queryResult.workItems[j] = new tfs_data_1.Workitem();
|
|
284
|
-
queryResult.workItems[j].url = wiT.url;
|
|
285
|
-
queryResult.workItems[j].fields = new Array(results.columns.length);
|
|
286
|
-
if (wiT.relations != null) {
|
|
287
|
-
queryResult.workItems[j].attachments = wiT.relations;
|
|
288
|
-
}
|
|
289
|
-
// rel.q = queryResult;
|
|
290
|
-
for (i = 0; i < queryResult.columns.length; i++) {
|
|
291
|
-
//.. rel.q.workItems[j].fields[i] = new value();
|
|
292
|
-
queryResult.workItems[j].fields[i] = new tfs_data_6.value();
|
|
293
|
-
queryResult.workItems[j].fields[i].name =
|
|
294
|
-
queryResult.columns[i].name;
|
|
295
|
-
if (results.columns[i].referenceName.toUpperCase() ==
|
|
296
|
-
"SYSTEM.ASSIGNEDTO" &&
|
|
297
|
-
wiT.fields[results.columns[i].referenceName] != null)
|
|
298
|
-
queryResult.workItems[j].fields[i].value =
|
|
299
|
-
wiT.fields[results.columns[i].referenceName].displayName;
|
|
300
|
-
else
|
|
301
|
-
queryResult.workItems[j].fields[i].value =
|
|
302
|
-
wiT.fields[queryResult.columns[i].referenceName];
|
|
303
|
-
//}
|
|
304
|
-
}
|
|
305
|
-
if (results.workItemRelations[j].source != null)
|
|
306
|
-
queryResult.workItems[j].Source =
|
|
307
|
-
results.workItemRelations[j].source.id;
|
|
272
|
+
wiT.fields[queryResult.columns[i].referenceName];
|
|
273
|
+
//}
|
|
308
274
|
}
|
|
275
|
+
if (results.workItemRelations[j].source != null)
|
|
276
|
+
queryResult.workItems[j].Source =
|
|
277
|
+
results.workItemRelations[j].source.id;
|
|
309
278
|
}
|
|
310
279
|
}
|
|
311
|
-
|
|
312
|
-
|
|
280
|
+
}
|
|
281
|
+
return queryResult;
|
|
313
282
|
}
|
|
314
283
|
BuildColumns(results, queryResult) {
|
|
315
284
|
for (var i = 0; i < results.columns.length; i++) {
|
|
@@ -319,66 +288,56 @@ class TicketsDataProvider {
|
|
|
319
288
|
queryResult.columns[i].url = results.columns[i].url;
|
|
320
289
|
}
|
|
321
290
|
}
|
|
322
|
-
GetIterationsByTeamName(projectName, teamName) {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
return res;
|
|
334
|
-
});
|
|
291
|
+
async GetIterationsByTeamName(projectName, teamName) {
|
|
292
|
+
let res;
|
|
293
|
+
let url;
|
|
294
|
+
if (teamName) {
|
|
295
|
+
url = `${this.orgUrl}${projectName}/${teamName}/_apis/work/teamsettings/iterations`;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
url = `${this.orgUrl}${projectName}/_apis/work/teamsettings/iterations`;
|
|
299
|
+
}
|
|
300
|
+
res = await tfs_1.TFSServices.getItemContent(url, this.token, "get");
|
|
301
|
+
return res;
|
|
335
302
|
} //GetIterationsByTeamName
|
|
336
|
-
CreateNewWorkItem(projectName, wiBody, wiType, byPass) {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
return tfs_1.TFSServices.getItemContent(url, this.token, "POST", wiBody, { "Content-Type": "application/json-patch+json" });
|
|
340
|
-
});
|
|
303
|
+
async CreateNewWorkItem(projectName, wiBody, wiType, byPass) {
|
|
304
|
+
let url = `${this.orgUrl}${projectName}/_apis/wit/workitems/$${wiType}?bypassRules=${String(byPass).toString()}`;
|
|
305
|
+
return tfs_1.TFSServices.getItemContent(url, this.token, "POST", wiBody, { "Content-Type": "application/json-patch+json" });
|
|
341
306
|
} //CreateNewWorkItem
|
|
342
|
-
GetWorkitemAttachments(project, id) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
if (!wi.relations)
|
|
349
|
-
return [];
|
|
350
|
-
yield Promise.all(wi.relations.map((relation) => __awaiter(this, void 0, void 0, function* () {
|
|
351
|
-
if (relation.rel == "AttachedFile") {
|
|
352
|
-
let attachment = JSON.parse(JSON.stringify(relation));
|
|
353
|
-
attachment.downloadUrl = `${relation.url}/${relation.attributes.name}`;
|
|
354
|
-
attachmentList.push(attachment);
|
|
355
|
-
}
|
|
356
|
-
})));
|
|
357
|
-
return attachmentList;
|
|
358
|
-
}
|
|
359
|
-
catch (e) {
|
|
360
|
-
logger_1.default.error(`error fetching attachments for work item ${id}`);
|
|
361
|
-
logger_1.default.error(`${JSON.stringify(e)}`);
|
|
307
|
+
async GetWorkitemAttachments(project, id) {
|
|
308
|
+
let attachmentList = [];
|
|
309
|
+
let ticketsDataProvider = new TicketsDataProvider(this.orgUrl, this.token);
|
|
310
|
+
try {
|
|
311
|
+
let wi = await ticketsDataProvider.GetWorkItem(project, id);
|
|
312
|
+
if (!wi.relations)
|
|
362
313
|
return [];
|
|
363
|
-
|
|
364
|
-
|
|
314
|
+
await Promise.all(wi.relations.map(async (relation) => {
|
|
315
|
+
if (relation.rel == "AttachedFile") {
|
|
316
|
+
let attachment = JSON.parse(JSON.stringify(relation));
|
|
317
|
+
attachment.downloadUrl = `${relation.url}/${relation.attributes.name}`;
|
|
318
|
+
attachmentList.push(attachment);
|
|
319
|
+
}
|
|
320
|
+
}));
|
|
321
|
+
return attachmentList;
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
logger_1.default.error(`error fetching attachments for work item ${id}`);
|
|
325
|
+
logger_1.default.error(`${JSON.stringify(e)}`);
|
|
326
|
+
return [];
|
|
327
|
+
}
|
|
365
328
|
}
|
|
366
|
-
GetWorkitemAttachmentsJSONData(project, attachmentId) {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
return attachment;
|
|
371
|
-
});
|
|
329
|
+
async GetWorkitemAttachmentsJSONData(project, attachmentId) {
|
|
330
|
+
let wiuRL = `${this.orgUrl}${project}/_apis/wit/attachments/${attachmentId}`;
|
|
331
|
+
let attachment = await tfs_1.TFSServices.getItemContent(wiuRL, this.token);
|
|
332
|
+
return attachment;
|
|
372
333
|
}
|
|
373
|
-
UpdateWorkItem(projectName, wiBody, workItemId, byPass) {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
"Content-Type": "application/json-patch+json",
|
|
379
|
-
});
|
|
380
|
-
return res;
|
|
334
|
+
async UpdateWorkItem(projectName, wiBody, workItemId, byPass) {
|
|
335
|
+
let res;
|
|
336
|
+
let url = `${this.orgUrl}${projectName}/_apis/wit/workitems/${workItemId}?bypassRules=${String(byPass).toString()}`;
|
|
337
|
+
res = await tfs_1.TFSServices.getItemContent(url, this.token, "patch", wiBody, {
|
|
338
|
+
"Content-Type": "application/json-patch+json",
|
|
381
339
|
});
|
|
340
|
+
return res;
|
|
382
341
|
} //CreateNewWorkItem
|
|
383
342
|
}
|
|
384
343
|
exports.default = TicketsDataProvider;
|