@gitkraken/core-gitlens 0.12.0 → 0.14.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.
Files changed (198) hide show
  1. package/CHANGELOG.md +78 -1
  2. package/dist/git/cache.d.ts +84 -29
  3. package/dist/git/cache.js +188 -54
  4. package/dist/git/cache.js.map +1 -1
  5. package/dist/git/features.d.ts +1 -1
  6. package/dist/git/features.js +5 -0
  7. package/dist/git/features.js.map +1 -1
  8. package/dist/git/models/branch.d.ts +20 -2
  9. package/dist/git/models/branch.js +28 -6
  10. package/dist/git/models/branch.js.map +1 -1
  11. package/dist/git/models/reference.d.ts +3 -0
  12. package/dist/git/models/status.js +2 -2
  13. package/dist/git/models/worktree.d.ts +4 -1
  14. package/dist/git/models/worktree.js +4 -2
  15. package/dist/git/models/worktree.js.map +1 -1
  16. package/dist/git/parsers/diffParser.js +1 -1
  17. package/dist/git/providers/branches.d.ts +73 -8
  18. package/dist/git/providers/operations.d.ts +3 -2
  19. package/dist/git/providers/pausedOperations.d.ts +6 -0
  20. package/dist/git/providers/provider.d.ts +45 -2
  21. package/dist/git/providers/revision.d.ts +17 -3
  22. package/dist/git/providers/status.d.ts +8 -2
  23. package/dist/git/remotes/azure-devops.js +61 -53
  24. package/dist/git/remotes/azure-devops.js.map +1 -1
  25. package/dist/git/run.types.d.ts +12 -0
  26. package/dist/git/service.d.ts +8 -5
  27. package/dist/git/service.js +16 -8
  28. package/dist/git/service.js.map +1 -1
  29. package/dist/git/utils/branch.utils.d.ts +12 -2
  30. package/dist/git/utils/branch.utils.js +49 -5
  31. package/dist/git/utils/branch.utils.js.map +1 -1
  32. package/dist/git/utils/reference.utils.d.ts +1 -0
  33. package/dist/git/utils/reference.utils.js.map +1 -1
  34. package/dist/git/watching/changeEvent.d.ts +13 -2
  35. package/dist/git/watching/changeEvent.js +17 -3
  36. package/dist/git/watching/changeEvent.js.map +1 -1
  37. package/dist/git/watching/gitDirPoller.d.ts +111 -0
  38. package/dist/git/watching/gitDirPoller.js +266 -0
  39. package/dist/git/watching/gitDirPoller.js.map +1 -0
  40. package/dist/git/watching/provider.d.ts +16 -0
  41. package/dist/git/watching/watchGroup.d.ts +40 -4
  42. package/dist/git/watching/watchGroup.js +143 -17
  43. package/dist/git/watching/watchGroup.js.map +1 -1
  44. package/dist/git/watching/watchService.d.ts +70 -1
  45. package/dist/git/watching/watchService.js +158 -13
  46. package/dist/git/watching/watchService.js.map +1 -1
  47. package/dist/git/watching/watchSession.d.ts +44 -0
  48. package/dist/git/watching/watchSession.js +91 -6
  49. package/dist/git/watching/watchSession.js.map +1 -1
  50. package/dist/git/watching/watcherPatterns.d.ts +21 -0
  51. package/dist/git/watching/watcherPatterns.js +67 -1
  52. package/dist/git/watching/watcherPatterns.js.map +1 -1
  53. package/dist/git/watching/worktreeSummary.d.ts +34 -7
  54. package/dist/git/watching/worktreeSummary.js +39 -12
  55. package/dist/git/watching/worktreeSummary.js.map +1 -1
  56. package/dist/git-cli/cliGitProvider.d.ts +40 -2
  57. package/dist/git-cli/cliGitProvider.js +182 -18
  58. package/dist/git-cli/cliGitProvider.js.map +1 -1
  59. package/dist/git-cli/exec/commandClassifier.d.ts +15 -0
  60. package/dist/git-cli/exec/commandClassifier.js +48 -2
  61. package/dist/git-cli/exec/commandClassifier.js.map +1 -1
  62. package/dist/git-cli/exec/git.d.ts +20 -3
  63. package/dist/git-cli/exec/git.js +63 -19
  64. package/dist/git-cli/exec/git.js.map +1 -1
  65. package/dist/git-cli/exec/gitQueue.d.ts +2 -0
  66. package/dist/git-cli/exec/gitQueue.js +2 -1
  67. package/dist/git-cli/exec/gitQueue.js.map +1 -1
  68. package/dist/git-cli/exec/indexLock.d.ts +39 -0
  69. package/dist/git-cli/exec/indexLock.js +160 -0
  70. package/dist/git-cli/exec/indexLock.js.map +1 -0
  71. package/dist/git-cli/parsers/blameParser.js +2 -2
  72. package/dist/git-cli/parsers/refParser.js +4 -2
  73. package/dist/git-cli/parsers/refParser.js.map +1 -1
  74. package/dist/git-cli/parsers/statusParser.d.ts +6 -0
  75. package/dist/git-cli/parsers/statusParser.js +33 -3
  76. package/dist/git-cli/parsers/statusParser.js.map +1 -1
  77. package/dist/git-cli/parsers/worktreeParser.js +42 -2
  78. package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
  79. package/dist/git-cli/providers/branchRemote.d.ts +14 -0
  80. package/dist/git-cli/providers/branchRemote.js +36 -0
  81. package/dist/git-cli/providers/branchRemote.js.map +1 -0
  82. package/dist/git-cli/providers/branches.d.ts +109 -10
  83. package/dist/git-cli/providers/branches.js +630 -134
  84. package/dist/git-cli/providers/branches.js.map +1 -1
  85. package/dist/git-cli/providers/commits.js +2 -2
  86. package/dist/git-cli/providers/config.d.ts +9 -5
  87. package/dist/git-cli/providers/config.js +58 -25
  88. package/dist/git-cli/providers/config.js.map +1 -1
  89. package/dist/git-cli/providers/contributors.js +1 -1
  90. package/dist/git-cli/providers/graph.js +9 -6
  91. package/dist/git-cli/providers/graph.js.map +1 -1
  92. package/dist/git-cli/providers/operations.d.ts +17 -0
  93. package/dist/git-cli/providers/operations.js +172 -111
  94. package/dist/git-cli/providers/operations.js.map +1 -1
  95. package/dist/git-cli/providers/pausedOperations.d.ts +8 -0
  96. package/dist/git-cli/providers/pausedOperations.js +59 -39
  97. package/dist/git-cli/providers/pausedOperations.js.map +1 -1
  98. package/dist/git-cli/providers/refs.js +11 -8
  99. package/dist/git-cli/providers/refs.js.map +1 -1
  100. package/dist/git-cli/providers/remotes.js +19 -10
  101. package/dist/git-cli/providers/remotes.js.map +1 -1
  102. package/dist/git-cli/providers/revision.d.ts +6 -2
  103. package/dist/git-cli/providers/revision.js +38 -12
  104. package/dist/git-cli/providers/revision.js.map +1 -1
  105. package/dist/git-cli/providers/staging.js +39 -14
  106. package/dist/git-cli/providers/staging.js.map +1 -1
  107. package/dist/git-cli/providers/stash.d.ts +2 -0
  108. package/dist/git-cli/providers/stash.js +33 -18
  109. package/dist/git-cli/providers/stash.js.map +1 -1
  110. package/dist/git-cli/providers/status.d.ts +3 -1
  111. package/dist/git-cli/providers/status.js +40 -22
  112. package/dist/git-cli/providers/status.js.map +1 -1
  113. package/dist/git-cli/providers/tags.js +6 -4
  114. package/dist/git-cli/providers/tags.js.map +1 -1
  115. package/dist/git-cli/providers/worktrees.d.ts +1 -0
  116. package/dist/git-cli/providers/worktrees.js +60 -31
  117. package/dist/git-cli/providers/worktrees.js.map +1 -1
  118. package/dist/git-cli/service.d.ts +6 -0
  119. package/dist/git-cli/service.js +5 -2
  120. package/dist/git-cli/service.js.map +1 -1
  121. package/dist/plus/git-github/providers/github/revision.d.ts +6 -2
  122. package/dist/plus/git-github/providers/github/revision.js +15 -10
  123. package/dist/plus/git-github/providers/github/revision.js.map +1 -1
  124. package/dist/plus/git-github/providers/github/status.d.ts +3 -1
  125. package/dist/plus/git-github/providers/github/status.js +2 -2
  126. package/dist/plus/git-github/providers/github/status.js.map +1 -1
  127. package/dist/plus/integrations/collectionMetadata.d.ts +13 -2
  128. package/dist/plus/integrations/collectionMetadata.js +14 -2
  129. package/dist/plus/integrations/collectionMetadata.js.map +1 -1
  130. package/dist/plus/integrations/index.d.ts +2 -2
  131. package/dist/plus/integrations/index.js.map +1 -1
  132. package/dist/plus/integrations/integrationService.d.ts +1 -0
  133. package/dist/plus/integrations/integrationService.js +1 -1
  134. package/dist/plus/integrations/integrationService.js.map +1 -1
  135. package/dist/plus/integrations/manager.d.ts +1 -0
  136. package/dist/plus/integrations/models/gitHostIntegration.d.ts +41 -5
  137. package/dist/plus/integrations/models/gitHostIntegration.js +106 -29
  138. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  139. package/dist/plus/integrations/models/issueReads.d.ts +17 -4
  140. package/dist/plus/integrations/providers/apiClients.d.ts +2 -0
  141. package/dist/plus/integrations/providers/apiClients.js +7 -1
  142. package/dist/plus/integrations/providers/apiClients.js.map +1 -1
  143. package/dist/plus/integrations/providers/azure/azure.d.ts +5 -4
  144. package/dist/plus/integrations/providers/azure/azure.js +36 -76
  145. package/dist/plus/integrations/providers/azure/azure.js.map +1 -1
  146. package/dist/plus/integrations/providers/azure/azure.utils.js +20 -17
  147. package/dist/plus/integrations/providers/azure/azure.utils.js.map +1 -1
  148. package/dist/plus/integrations/providers/azure/models.d.ts +2 -2
  149. package/dist/plus/integrations/providers/azure/models.js +4 -4
  150. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  151. package/dist/plus/integrations/providers/azure/workItemStateCategories.d.ts +21 -12
  152. package/dist/plus/integrations/providers/azure/workItemStateCategories.js +74 -17
  153. package/dist/plus/integrations/providers/azure/workItemStateCategories.js.map +1 -1
  154. package/dist/plus/integrations/providers/azureDevOps.d.ts +44 -0
  155. package/dist/plus/integrations/providers/azureDevOps.js +108 -17
  156. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  157. package/dist/plus/integrations/providers/azureDevOpsServer.d.ts +45 -1
  158. package/dist/plus/integrations/providers/azureDevOpsServer.js +121 -6
  159. package/dist/plus/integrations/providers/azureDevOpsServer.js.map +1 -1
  160. package/dist/plus/integrations/providers/jira-server.js +18 -14
  161. package/dist/plus/integrations/providers/jira-server.js.map +1 -1
  162. package/dist/plus/integrations/providers/jira.js +18 -14
  163. package/dist/plus/integrations/providers/jira.js.map +1 -1
  164. package/dist/plus/integrations/providers/models.d.ts +1 -2
  165. package/dist/plus/integrations/providers/models.js +9 -2
  166. package/dist/plus/integrations/providers/models.js.map +1 -1
  167. package/dist/plus/integrations/providers/providersApi.d.ts +7 -17
  168. package/dist/plus/integrations/providers/providersApi.js +85 -78
  169. package/dist/plus/integrations/providers/providersApi.js.map +1 -1
  170. package/dist/plus/integrations/providers/utils/jiraIssueDrains.d.ts +22 -0
  171. package/dist/plus/integrations/providers/utils/jiraIssueDrains.js +69 -9
  172. package/dist/plus/integrations/providers/utils/jiraIssueDrains.js.map +1 -1
  173. package/dist/plus/integrations/providers/utils/providerPaging.js +8 -2
  174. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -1
  175. package/dist/plus/integrations/reads/filters.d.ts +3 -3
  176. package/dist/plus/integrations/reads/filters.js.map +1 -1
  177. package/dist/plus/integrations/reads/issueBatch.d.ts +2 -1
  178. package/dist/plus/integrations/reads/issueBatch.js +1 -1
  179. package/dist/plus/integrations/reads/issueBatch.js.map +1 -1
  180. package/dist/plus/integrations/reads/issueTracker.js +23 -14
  181. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  182. package/dist/plus/integrations/reads/issues.d.ts +2 -1
  183. package/dist/plus/integrations/reads/issues.js +18 -3
  184. package/dist/plus/integrations/reads/issues.js.map +1 -1
  185. package/dist/plus/integrations/reads/pullRequestBatch.js +1 -1
  186. package/dist/plus/integrations/reads/resolveRepository.js +12 -3
  187. package/dist/plus/integrations/reads/resolveRepository.js.map +1 -1
  188. package/dist/plus/integrations/reads/warnings.d.ts +11 -4
  189. package/dist/plus/integrations/reads/warnings.js +15 -5
  190. package/dist/plus/integrations/reads/warnings.js.map +1 -1
  191. package/dist/plus/integrations/results.d.ts +36 -2
  192. package/dist/plus/integrations/results.js +33 -13
  193. package/dist/plus/integrations/results.js.map +1 -1
  194. package/dist/utils/promiseCache.d.ts +10 -0
  195. package/dist/utils/promiseCache.js +17 -2
  196. package/dist/utils/promiseCache.js.map +1 -1
  197. package/docs/integrations.md +52 -20
  198. package/package.json +2 -2
@@ -1,22 +1,20 @@
1
1
  import { mapSettledBounded } from "../../../utils/promise.js";
2
- import { PromiseCache } from "../../../utils/promiseCache.js";
3
2
  import { RequestNotFoundError } from "../../../git/errors.js";
4
3
  import { base64 } from "../../../utils/base64.js";
5
- import { isTerminalIssueStateCategory } from "../../../git/utils/issue.utils.js";
6
4
  import { toError } from "../errors.js";
7
5
  import "../constants.js";
8
6
  import { UnexpectedHtmlResponseError, getProviderResponseBodyMessage, isAzureProviderId, isProviderIssueNotFoundError, throwProviderError } from "./providerErrors.js";
9
7
  import { isIncompleteCollection, toCollectionScopeFailure } from "../collectionMetadata.js";
10
8
  import { toTokenWithInfo } from "../authentication/models.js";
11
9
  import { collectProviderPagedResult, mergeCollectionMetadata, parsePageCursor, toPageCursor } from "./utils/providerPaging.js";
12
- import { GitIssueState as GitIssueState$1, isRepoIdsInput, providersMetadata } from "./models.js";
13
- import { azureWorkItemEtagFieldNames, encodeAzurePathSegment, fromAzureWorkItemToProviderIssue } from "./azure/models.js";
14
- import { getAzureWorkItemTypeStatesUrl, parseAzureWorkItemTypeStates } from "./azure/workItemStateCategories.js";
10
+ import { isRepoIdsInput, providersMetadata } from "./models.js";
11
+ import { azureIssueStateCategory, azureWorkItemEtagFieldNames, encodeAzurePathSegment, fromAzureWorkItemToProviderIssue } from "./azure/models.js";
12
+ import { AzureWorkItemStatesCache, getAzureWorkItemTypeStatesUrl, getAzureWorkItemTypesUrl } from "./azure/workItemStateCategories.js";
15
13
  import { requestJiraIssueByKey, requestJiraIssuesEtagFields } from "./jiraIssueByKey.js";
16
14
  import { requestLinearIssuesEtagFields } from "./linearIssuesEtag.js";
17
15
  import { requestBitbucketServerProjects, requestBitbucketServerRepositories } from "./bitbucket-server/discovery.js";
18
16
  import { countBitbucketServerPullRequests, searchBitbucketServerPullRequestsPage } from "./bitbucket-server/pullRequestSearch.js";
19
- import ProviderApis from "@gitkraken/provider-apis";
17
+ import ProviderApis, { GitIssueState } from "@gitkraken/provider-apis";
20
18
  //#region ../plus/integrations/src/providers/providersApi.ts
21
19
  const createProviderApis = ProviderApis.default ?? ProviderApis;
22
20
  const repoNotFoundMessage = /^Repository .+ not found$/i;
@@ -49,21 +47,6 @@ function azureAuthorization(token, isPAT) {
49
47
  return isPAT ? `Basic ${base64(`:${token}`)}` : `Bearer ${token}`;
50
48
  }
51
49
  const azureDevOpsBaseUrl = "https://dev.azure.com";
52
- /**
53
- * The work items of an Azure list read that are in the states it asked for. provider-apis selects them by their closed
54
- * and resolved dates (no state asks for open ones), while a row now also closes on its workflow category: a Removed work
55
- * item has neither date, so an open read would otherwise list it, closed. A read of closed work items is left as the
56
- * query selected it, since a resolved date alone selects one that carries no closed date or, when its type's states
57
- * could not be read, no category; and it can't be completed either, as the query never selects a dateless one.
58
- */
59
- function withRequestedAzureIssueStates(issues, states) {
60
- if (!(!states?.length || states.includes(GitIssueState$1.Open) && !states.includes(GitIssueState$1.Closed))) return issues;
61
- return issues.filter((i) => i.closedDate == null && !isTerminalIssueStateCategory(i.state?.category));
62
- }
63
- /** How long a work item type's states classify its work items before they are read again. */
64
- const azureWorkItemTypeStatesTTL = 3e5;
65
- /** The most work item type state reads kept, across hosts, projects, types and credentials. */
66
- const azureWorkItemTypeStatesCapacity = 256;
67
50
  /** The most group descriptors one identity batch read resolves. */
68
51
  const azureIdentityBatchSize = 100;
69
52
  /** Azure DevOps Services serves the identity APIs from its own host, below the organization like the main one. */
@@ -137,19 +120,12 @@ function toJiraIssuePage(result) {
137
120
  }
138
121
  var ProvidersApi = class {
139
122
  authenticationService;
123
+ azureWorkItemTypeStates;
140
124
  providers;
141
125
  request;
142
- /**
143
- * Each work item type's states, by URL (host, organization, project and type) and credential: coalesces the reads
144
- * of the same type, and never answers one credential with what another one read. A failed read is not kept, so the
145
- * next read retries it.
146
- */
147
- azureWorkItemTypeStates = new PromiseCache({
148
- createTTL: azureWorkItemTypeStatesTTL,
149
- capacity: azureWorkItemTypeStatesCapacity
150
- });
151
- constructor(authenticationService) {
126
+ constructor(authenticationService, azureWorkItemTypeStates = new AzureWorkItemStatesCache()) {
152
127
  this.authenticationService = authenticationService;
128
+ this.azureWorkItemTypeStates = azureWorkItemTypeStates;
153
129
  const http = authenticationService.ctx.http;
154
130
  const userAgent = http.userAgent;
155
131
  const customFetch = async ({ url, ...options }) => {
@@ -1144,17 +1120,30 @@ var ProvidersApi = class {
1144
1120
  }
1145
1121
  async getIssuesForAzureProject(tokenOptInfo, namespace, project, options) {
1146
1122
  const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, "getIssuesForAzureProjectFn");
1147
- const result = await this.getPagedResult({
1123
+ const workItemTypeStates = options?.states?.includes(GitIssueState.Open) && options.states.includes(GitIssueState.Closed) ? void 0 : await this.getAzureProjectWorkItemStates(tokenWithInfo, namespace, project, options);
1124
+ const page = await this.getPagedResult({
1148
1125
  namespace,
1149
1126
  project,
1150
- ...options
1127
+ ...options,
1128
+ workItemTypeStates
1151
1129
  }, provider.getIssuesForAzureProjectFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
1130
+ const result = workItemTypeStates?.metadata == null ? page : {
1131
+ ...page,
1132
+ metadata: mergeCollectionMetadata(page.metadata, workItemTypeStates.metadata),
1133
+ paging: {
1134
+ ...page.paging ?? {
1135
+ cursor: "{}",
1136
+ more: false
1137
+ },
1138
+ truncated: true
1139
+ }
1140
+ };
1152
1141
  try {
1153
- await this.classifyAzureIssueStates(result.values, tokenWithInfo, namespace, project, options);
1142
+ await this.classifyAzureIssueStates(result.values, tokenWithInfo, namespace, project, options, workItemTypeStates);
1154
1143
  } catch (ex) {
1155
1144
  return {
1156
1145
  ...result,
1157
- values: withRequestedAzureIssueStates(result.values, options?.states),
1146
+ values: result.values,
1158
1147
  paging: {
1159
1148
  ...result.paging ?? {
1160
1149
  cursor: "{}",
@@ -1172,60 +1161,78 @@ var ProvidersApi = class {
1172
1161
  })
1173
1162
  };
1174
1163
  }
1164
+ return result;
1165
+ }
1166
+ azureStatesScope(token, namespace, project, options) {
1175
1167
  return {
1176
- ...result,
1177
- values: withRequestedAzureIssueStates(result.values, options?.states)
1168
+ baseUrl: options?.baseUrl ?? azureDevOpsBaseUrl,
1169
+ namespace,
1170
+ project,
1171
+ token: token.accessToken,
1172
+ isPAT: options?.isPAT === true
1178
1173
  };
1179
1174
  }
1180
- /**
1181
- * Gives each of `issues` with both a type and a state the workflow category of that state, from its type's states
1182
- * (see {@link azureWorkItemTypeStates}): `undefined` for a state the type doesn't list. Keyed on the raw
1183
- * `System.State`, which is the state name on every Azure read here because core passes the SDK no state-name map;
1184
- * passing one would break the lookup.
1185
- *
1186
- * Reads each distinct type once, a bounded number at a time. A type whose read fails leaves its issues untouched,
1187
- * after the other types' issues are classified, and the first failure then rejects, classified by
1188
- * {@link handleProviderError}.
1189
- */
1190
- async classifyAzureIssueStates(issues, tokenWithInfo, namespace, project, options) {
1191
- const baseUrl = options?.baseUrl ?? azureDevOpsBaseUrl;
1192
- const types = [...new Set(issues.flatMap((i) => i.state?.name && i.type ? [i.type] : []))];
1193
- if (!types.length) return;
1194
- const token = tokenWithInfo.accessToken;
1195
- const results = await mapSettledBounded(types, 6, async (type) => {
1196
- const url = getAzureWorkItemTypeStatesUrl(baseUrl, namespace, project, type);
1197
- return [type, await this.azureWorkItemTypeStates.getOrCreate(JSON.stringify([
1198
- baseUrl.replace(/\/$/, ""),
1199
- namespace.toLowerCase(),
1200
- project.toLowerCase(),
1201
- type.toLowerCase(),
1202
- token,
1203
- options?.isPAT === true
1204
- ]), async () => {
1205
- try {
1206
- const response = await this.request({
1207
- url,
1208
- headers: { Authorization: azureAuthorization(token, options?.isPAT) }
1209
- });
1210
- return parseAzureWorkItemTypeStates(response.body);
1211
- } catch (ex) {
1212
- return this.handleProviderError(tokenWithInfo, ex);
1175
+ async readAzureStatesMetadata(token, url, isPAT) {
1176
+ try {
1177
+ return (await this.request({
1178
+ url,
1179
+ headers: { Authorization: azureAuthorization(token.accessToken, isPAT) }
1180
+ })).body;
1181
+ } catch (ex) {
1182
+ return this.handleProviderError(token, ex);
1183
+ }
1184
+ }
1185
+ getAzureTypeStates(token, scope, type) {
1186
+ return this.azureWorkItemTypeStates.getStates(scope, type, () => this.readAzureStatesMetadata(token, getAzureWorkItemTypeStatesUrl(scope.baseUrl, scope.namespace, scope.project, type), scope.isPAT));
1187
+ }
1188
+ async getAzureProjectWorkItemStates(token, namespace, project, options) {
1189
+ const scope = this.azureStatesScope(token, namespace, project, options);
1190
+ const failureScope = {
1191
+ providerId: token.providerId,
1192
+ resourceId: namespace,
1193
+ projectId: project
1194
+ };
1195
+ let types;
1196
+ try {
1197
+ types = await this.azureWorkItemTypeStates.getTypes(scope, () => this.readAzureStatesMetadata(token, getAzureWorkItemTypesUrl(scope.baseUrl, namespace, project), scope.isPAT));
1198
+ } catch (ex) {
1199
+ return {
1200
+ types: [],
1201
+ metadata: {
1202
+ completeness: "partial",
1203
+ failures: [toCollectionScopeFailure(failureScope, ex)]
1213
1204
  }
1214
- })];
1215
- });
1216
- const statesByType = /* @__PURE__ */ new Map();
1217
- let failure;
1218
- for (const result of results) if (result.status === "fulfilled") statesByType.set(result.value[0], result.value[1]);
1219
- else failure ??= result;
1205
+ };
1206
+ }
1207
+ const results = await mapSettledBounded(types, 6, async (type) => ({
1208
+ name: type,
1209
+ states: await this.getAzureTypeStates(token, scope, type)
1210
+ }));
1211
+ const failures = results.flatMap((r) => r.status === "rejected" ? [toCollectionScopeFailure(failureScope, r.reason)] : []);
1212
+ return {
1213
+ types: results.map((r, i) => r.status === "fulfilled" ? r.value : { name: types[i] }),
1214
+ ...failures.length ? { metadata: {
1215
+ completeness: "partial",
1216
+ failures
1217
+ } } : {}
1218
+ };
1219
+ }
1220
+ async classifyAzureIssueStates(issues, tokenWithInfo, namespace, project, options, snapshot) {
1221
+ const scope = this.azureStatesScope(tokenWithInfo, namespace, project, options);
1222
+ const snapshotTypes = new Map(snapshot?.types.map((type) => [type.name, type.states]));
1223
+ const types = [...new Set(issues.flatMap((i) => i.state?.name && i.type && !snapshotTypes.has(i.type) ? [i.type] : []))];
1224
+ const results = await mapSettledBounded(types, 6, async (type) => [type, await this.getAzureTypeStates(tokenWithInfo, scope, type)]);
1225
+ const statesByType = new Map([...snapshotTypes, ...results.flatMap((r) => r.status === "fulfilled" ? [r.value] : [])]);
1220
1226
  for (const issue of issues) {
1221
1227
  const states = issue.type ? statesByType.get(issue.type) : void 0;
1222
1228
  if (states == null || issue.state == null) continue;
1223
1229
  issue.state = {
1224
1230
  ...issue.state,
1225
- category: states.get(issue.state.name)
1231
+ category: azureIssueStateCategory(states.find((s) => s.name === issue.state?.name)?.category)
1226
1232
  };
1227
1233
  }
1228
- if (failure != null) throw failure.reason;
1234
+ const failure = results.find((r) => r.status === "rejected");
1235
+ if (failure?.status === "rejected") throw failure.reason;
1229
1236
  }
1230
1237
  async getIssuesForProject(tokenOptInfo, project, resourceId, options) {
1231
1238
  const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, "getIssuesForProjectFn");