@elisra-devops/docgen-data-provider 1.136.7 → 1.137.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/modules/MangementDataProvider.d.ts +1 -0
- package/bin/modules/MangementDataProvider.js +9 -0
- package/bin/modules/MangementDataProvider.js.map +1 -1
- package/bin/modules/TicketsDataProvider.js +45 -8
- package/bin/modules/TicketsDataProvider.js.map +1 -1
- package/bin/tests/modules/managmentDataProvider.test.js +22 -0
- package/bin/tests/modules/managmentDataProvider.test.js.map +1 -1
- package/bin/tests/modules/ticketsDataProvider.historical.test.js +105 -3
- package/bin/tests/modules/ticketsDataProvider.historical.test.js.map +1 -1
- package/package.json +1 -1
- package/src/modules/MangementDataProvider.ts +12 -0
- package/src/modules/TicketsDataProvider.ts +57 -11
- package/src/tests/modules/managmentDataProvider.test.ts +44 -0
- package/src/tests/modules/ticketsDataProvider.historical.test.ts +124 -3
|
@@ -58,6 +58,15 @@ class MangementDataProvider {
|
|
|
58
58
|
// Use provided token or empty string for URL-only validation
|
|
59
59
|
return tfs_1.TFSServices.getItemContent(url, token || '', 'get', null, null, false);
|
|
60
60
|
}
|
|
61
|
+
// Resolves the AD domain/account for an on-prem, Windows-integrated-auth
|
|
62
|
+
// identity via the documented Identities REST API. Works with both PAT
|
|
63
|
+
// and bearer tokens — TFSServices.getItemContent/applyAuth already
|
|
64
|
+
// auto-detects which one it was given. printError=false: failure here is
|
|
65
|
+
// the EXPECTED, common case (any cloud/Entra-backed org), not a real error.
|
|
66
|
+
async GetIdentityById(identityId) {
|
|
67
|
+
const url = `${this.orgUrl}_apis/identities?identityIds=${encodeURIComponent(identityId)}&queryMembership=None&api-version=6.0`;
|
|
68
|
+
return tfs_1.TFSServices.getItemContent(url, this.token, 'get', null, null, false);
|
|
69
|
+
}
|
|
61
70
|
}
|
|
62
71
|
exports.default = MangementDataProvider;
|
|
63
72
|
//# sourceMappingURL=MangementDataProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MangementDataProvider.js","sourceRoot":"","sources":["../../src/modules/MangementDataProvider.ts"],"names":[],"mappings":";;AAAA,wCAA6C;AAC7C,4CAAqC;AAErC,MAAqB,qBAAqB;IAIxC,YAAY,MAAc,EAAE,KAAa;QAHzC,WAAM,GAAW,EAAE,CAAC;QACpB,UAAK,GAAW,EAAE,CAAC;QAGjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,iCAAiC,CAAC;QAClE,IAAI,GAAG,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,WAAW;QACf,IAAI,UAAU,GAAW,GAAG,IAAI,CAAC,MAAM,0BAA0B,CAAC;QAClE,IAAI,QAAQ,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,IAAI,CAAC;YACH,IAAI,QAAQ,GAAQ,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,yEAAyE;YACzE,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,gBAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBACvE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,UAAU,GAAW,GAAG,IAAI,CAAC,MAAM,kBAAkB,SAAS,EAAE,CAAC;QACrE,IAAI,OAAO,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,mCAAmC,CAAC;QACpE,OAAO,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,iEAAiE;IACjE,mDAAmD;IACnD,wDAAwD;IACxD,KAAK,CAAC,mBAAmB,CAAC,KAAc;QACtC,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,sBAAsB,CAAC;QACvD,6DAA6D;QAC7D,OAAO,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"MangementDataProvider.js","sourceRoot":"","sources":["../../src/modules/MangementDataProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1575,15 +1575,52 @@ class TicketsDataProvider {
|
|
|
1575
1575
|
const workItemsBatchUrl = this.appendApiVersion(`${this.orgUrl}${project}/_apis/wit/workitemsbatch`, apiVersion);
|
|
1576
1576
|
const idChunks = this.chunkHistoricalWorkItemIds(ids);
|
|
1577
1577
|
try {
|
|
1578
|
-
const
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1578
|
+
const chunkResults = await Promise.all(idChunks.map((idChunk) =>
|
|
1579
|
+
// ADO rejects a workitemsbatch request that combines `fields` with
|
|
1580
|
+
// `$expand` in the same call ("the expand parameter can not be used
|
|
1581
|
+
// with the fields parameter"), so fields and relations are fetched
|
|
1582
|
+
// in two separate batched passes and merged by id below.
|
|
1583
|
+
// errorPolicy: 'Omit' keeps one inaccessible/deleted work item from
|
|
1584
|
+
// failing the whole chunk (ADO's default is 'Fail'), matching the
|
|
1585
|
+
// per-item fallback's tolerance for missing items.
|
|
1586
|
+
// Each pass gets its own this.limit(...) slot (rather than wrapping
|
|
1587
|
+
// both in one) so the two concurrent calls per chunk still count as
|
|
1588
|
+
// two units against the shared concurrency cap, not one — otherwise
|
|
1589
|
+
// the real ceiling on simultaneous ADO calls would silently double.
|
|
1590
|
+
Promise.all([
|
|
1591
|
+
this.limit(() => tfs_1.TFSServices.getItemContent(workItemsBatchUrl, this.token, 'post', {
|
|
1592
|
+
ids: idChunk,
|
|
1593
|
+
asOf,
|
|
1594
|
+
fields: HISTORICAL_WORK_ITEM_FIELDS,
|
|
1595
|
+
errorPolicy: 'Omit',
|
|
1596
|
+
})),
|
|
1597
|
+
this.limit(() => tfs_1.TFSServices.getItemContent(workItemsBatchUrl, this.token, 'post', {
|
|
1598
|
+
ids: idChunk,
|
|
1599
|
+
asOf,
|
|
1600
|
+
$expand: 'Relations',
|
|
1601
|
+
errorPolicy: 'Omit',
|
|
1602
|
+
})),
|
|
1603
|
+
]).then(([fieldsBatch, relationsBatch]) => {
|
|
1604
|
+
const relationsById = new Map();
|
|
1605
|
+
(Array.isArray(relationsBatch === null || relationsBatch === void 0 ? void 0 : relationsBatch.value) ? relationsBatch.value : []).forEach((item) => {
|
|
1606
|
+
const relId = Number(item === null || item === void 0 ? void 0 : item.id);
|
|
1607
|
+
if (Number.isFinite(relId)) {
|
|
1608
|
+
relationsById.set(relId, Array.isArray(item === null || item === void 0 ? void 0 : item.relations) ? item.relations : []);
|
|
1609
|
+
}
|
|
1610
|
+
});
|
|
1611
|
+
const fieldsValue = Array.isArray(fieldsBatch === null || fieldsBatch === void 0 ? void 0 : fieldsBatch.value) ? fieldsBatch.value : [];
|
|
1612
|
+
const returnedIds = new Set(fieldsValue.map((item) => Number(item === null || item === void 0 ? void 0 : item.id)));
|
|
1613
|
+
const items = fieldsValue.map((item) => (Object.assign(Object.assign({}, item), { relations: relationsById.get(Number(item === null || item === void 0 ? void 0 : item.id)) || [] })));
|
|
1614
|
+
const skippedWorkItemIds = idChunk.filter((id) => !returnedIds.has(id));
|
|
1615
|
+
if (skippedWorkItemIds.length > 0) {
|
|
1616
|
+
logger_1.default.warn(`[historical-workitems] workitemsbatch omitted ${skippedWorkItemIds.length} ` +
|
|
1617
|
+
`inaccessible/missing work item(s) for asOf ${asOf}: ${skippedWorkItemIds.join(', ')}`);
|
|
1618
|
+
}
|
|
1619
|
+
return { items, skippedWorkItemIds };
|
|
1620
|
+
})));
|
|
1584
1621
|
return {
|
|
1585
|
-
items:
|
|
1586
|
-
skippedWorkItemIds:
|
|
1622
|
+
items: chunkResults.flatMap((chunk) => chunk.items),
|
|
1623
|
+
skippedWorkItemIds: chunkResults.flatMap((chunk) => chunk.skippedWorkItemIds),
|
|
1587
1624
|
};
|
|
1588
1625
|
}
|
|
1589
1626
|
catch (error) {
|