@gitkraken/core-gitlens 0.4.100 → 0.4.101

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 (65) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/plus/integrations/errors.d.ts.map +1 -1
  3. package/dist/plus/integrations/errors.js +6 -2
  4. package/dist/plus/integrations/errors.js.map +1 -1
  5. package/dist/plus/integrations/integrationService.d.ts +8 -5
  6. package/dist/plus/integrations/integrationService.d.ts.map +1 -1
  7. package/dist/plus/integrations/integrationService.js +20 -652
  8. package/dist/plus/integrations/integrationService.js.map +1 -1
  9. package/dist/plus/integrations/models/gitHostIntegration.d.ts +10 -17
  10. package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
  11. package/dist/plus/integrations/models/gitHostIntegration.js +38 -88
  12. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  13. package/dist/plus/integrations/models/issuesIntegration.d.ts +4 -21
  14. package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -1
  15. package/dist/plus/integrations/models/issuesIntegration.js +5 -47
  16. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
  17. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  18. package/dist/plus/integrations/reads/broaden.d.ts +20 -0
  19. package/dist/plus/integrations/reads/broaden.d.ts.map +1 -0
  20. package/dist/plus/integrations/reads/broaden.js +326 -0
  21. package/dist/plus/integrations/reads/broaden.js.map +1 -0
  22. package/dist/plus/integrations/reads/context.d.ts +22 -0
  23. package/dist/plus/integrations/reads/context.d.ts.map +1 -1
  24. package/dist/plus/integrations/reads/hierarchy.d.ts +1 -1
  25. package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -1
  26. package/dist/plus/integrations/reads/hierarchy.js +109 -137
  27. package/dist/plus/integrations/reads/hierarchy.js.map +1 -1
  28. package/dist/plus/integrations/reads/hierarchy.utils.d.ts +25 -1
  29. package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -1
  30. package/dist/plus/integrations/reads/hierarchy.utils.js +43 -0
  31. package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -1
  32. package/dist/plus/integrations/reads/issueTracker.d.ts +1 -1
  33. package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
  34. package/dist/plus/integrations/reads/issueTracker.js +13 -25
  35. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  36. package/dist/plus/integrations/reads/issues.d.ts +2 -2
  37. package/dist/plus/integrations/reads/issues.d.ts.map +1 -1
  38. package/dist/plus/integrations/reads/issues.js.map +1 -1
  39. package/dist/plus/integrations/reads/pullRequests.d.ts +1 -1
  40. package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -1
  41. package/dist/plus/integrations/reads/pullRequests.js +1 -1
  42. package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
  43. package/dist/plus/integrations/reads/resolveRepository.d.ts +25 -0
  44. package/dist/plus/integrations/reads/resolveRepository.d.ts.map +1 -0
  45. package/dist/plus/integrations/reads/resolveRepository.js +235 -0
  46. package/dist/plus/integrations/reads/resolveRepository.js.map +1 -0
  47. package/dist/plus/integrations/reads/sweeps.d.ts +11 -0
  48. package/dist/plus/integrations/reads/sweeps.d.ts.map +1 -0
  49. package/dist/plus/integrations/reads/sweeps.js +125 -0
  50. package/dist/plus/integrations/reads/sweeps.js.map +1 -0
  51. package/package.json +1 -1
  52. package/src/plus/integrations/errors.ts +6 -2
  53. package/src/plus/integrations/integrationService.ts +27 -801
  54. package/src/plus/integrations/models/gitHostIntegration.ts +71 -93
  55. package/src/plus/integrations/models/issuesIntegration.ts +5 -52
  56. package/src/plus/integrations/providers/azureDevOps.ts +1 -1
  57. package/src/plus/integrations/reads/broaden.ts +452 -0
  58. package/src/plus/integrations/reads/context.ts +24 -0
  59. package/src/plus/integrations/reads/hierarchy.ts +133 -153
  60. package/src/plus/integrations/reads/hierarchy.utils.ts +50 -1
  61. package/src/plus/integrations/reads/issueTracker.ts +15 -27
  62. package/src/plus/integrations/reads/issues.ts +4 -2
  63. package/src/plus/integrations/reads/pullRequests.ts +2 -9
  64. package/src/plus/integrations/reads/resolveRepository.ts +272 -0
  65. package/src/plus/integrations/reads/sweeps.ts +185 -0
@@ -6,7 +6,7 @@ import { toProviderRepositoryShape } from '../providers/models.js';
6
6
  import { appendDedupedWarning } from '../results.js';
7
7
  import { isGitHostIntegration, isIssuesHostIntegrationId, warnOnMissingSessionForDomain, } from '../utils/integration.utils.js';
8
8
  import { runCaptured } from './drains.js';
9
- import { assertHierarchyReadTarget, orgForProject, resourceMatchesOrg, resourceToOrg, withProviderContext, } from './hierarchy.utils.js';
9
+ import { assertHierarchyReadTarget, mergeHierarchyResults, orgForProject, resourceMatchesOrg, resourceToOrg, withProviderContext, } from './hierarchy.utils.js';
10
10
  import { pageToCursor, refusedPage, resolveContinuation, resolveCurrentPage, toProviderPageInfo } from './paging.js';
11
11
  import { gitHostOnlySurfaceWarning, otherWarning } from './warnings.js';
12
12
  export async function listOrgs(ctx, options) {
@@ -78,24 +78,7 @@ export async function listOrgs(ctx, options) {
78
78
  }
79
79
  return { items: items, warnings: warnings, fetchFailed: fetchFailed };
80
80
  });
81
- const items = [];
82
- const warnings = [];
83
- let fetchFailed = false;
84
- for (const result of results) {
85
- if (result == null) {
86
- continue;
87
- }
88
- items.push(...result.items);
89
- // Dedupe across the multi-provider fan-out (matches listProjects): a warning that repeats verbatim
90
- // across scopes — e.g. the same account surfaced under two ids — shouldn't be reported twice.
91
- for (const w of result.warnings) {
92
- appendDedupedWarning(warnings, w);
93
- }
94
- if (result.fetchFailed) {
95
- fetchFailed = true;
96
- }
97
- }
98
- return { items: items, warnings: warnings, fetchFailed: fetchFailed || undefined };
81
+ return mergeHierarchyResults(results);
99
82
  }
100
83
  export async function listProjects(ctx, options) {
101
84
  assertHierarchyReadTarget('listProjects', options);
@@ -185,22 +168,7 @@ export async function listProjects(ctx, options) {
185
168
  }
186
169
  return { items: items, warnings: warnings, fetchFailed: fetchFailed };
187
170
  });
188
- const items = [];
189
- const warnings = [];
190
- let fetchFailed = false;
191
- for (const result of results) {
192
- if (result == null) {
193
- continue;
194
- }
195
- items.push(...result.items);
196
- for (const w of result.warnings) {
197
- appendDedupedWarning(warnings, w);
198
- }
199
- if (result.fetchFailed) {
200
- fetchFailed = true;
201
- }
202
- }
203
- return { items: items, warnings: warnings, fetchFailed: fetchFailed || undefined };
171
+ return mergeHierarchyResults(results);
204
172
  }
205
173
  export async function listRepos(ctx, options) {
206
174
  const page = Math.max(1, options.page ?? 1);
@@ -234,114 +202,118 @@ export async function listRepos(ctx, options) {
234
202
  ], true);
235
203
  }
236
204
  const org = options.org;
237
- const cursor = options.cursor ?? pageToCursor(page);
238
- const { value, warning } = await runCaptured(options.providerId, domain, options.connectionId, () => org == null
239
- ? integration.getRepositoriesForUserResult({
240
- cursor: cursor,
241
- connectionId: options.connectionId,
242
- })
205
+ const warnOnMissingSession = warnOnMissingSessionForDomain(options.providerId, options.domain);
206
+ const readPage = (cursor) => runCaptured(options.providerId, domain, options.connectionId, () => org == null
207
+ ? integration.getRepositoriesForUserResult({ cursor: cursor, connectionId: options.connectionId })
243
208
  : integration.getRepositoriesForOrgResult(org, {
244
209
  project: options.project,
245
210
  cursor: cursor,
246
211
  connectionId: options.connectionId,
247
- }), { warnOnMissingSession: warnOnMissingSessionForDomain(options.providerId, options.domain) });
248
- const items = value?.values ?? [];
249
- const warnings = warning != null ? [warning] : [];
250
- // The repos read core is cursor-only and can't accept a page size, so don't echo the requested
251
- // `itemsPerPage` as if it were applied report what the provider returned (its own pageSize when
252
- // available, else the actual item count).
253
- const paged = toProviderPageInfo(items.length, value?.paging);
254
- // Convert the SDK collection metadata into scope-aware warnings + failure/truncation flags, appending
255
- // them to any captured thrown-error warning without discarding the partial result's items.
256
- const assessment = mergeAssessmentInto(warnings, options.providerId, domain, options.connectionId, value?.metadata);
257
- // Whether this read honors a page NUMBER, decided from what the provider actually reported rather than
258
- // guessed from the absence of a cursor. A numbered-page repos host reports its position (`paging.page`)
259
- // and/or its successor (`paging.nextPage`) — Bitbucket's workspace walk consumes `page` as a real 1-based
260
- // page and reports `nextPage` without echoing `currentPage`, so both signals have to count. Every wired
261
- // cursor-based repos read (GitHub's org/user walks, GitLab's user walk, Bitbucket's cursor read) reports
262
- // neither. Keying off `paged.cursor == null` instead read the paging layer's "reported another page,
263
- // handed back no continuation" sentinel as evidence of a numbered host, which is exactly backwards.
264
- const pageAdvanceable = value?.paging?.page != null || value?.paging?.nextPage != null;
265
- // Numbered-page hosts that don't echo `currentPage` may still be advanced by the requested `page` (initial
266
- // read) or by the cursor the caller threaded back. A cursor-only host ignores an UNTHREADED `page`
267
- // request, so its page-less first page is page 1.
268
- const currentPage = resolveCurrentPage({
269
- providerPage: paged.page.currentPage,
270
- requestedPage: page,
271
- suppliedCursor: options.cursor,
272
- pageAdvanceable: pageAdvanceable,
273
- });
274
- // Never advertise `hasMore` without a continuation the caller can act on — the same contract
275
- // `listPullRequestsPage`, `listIssuesPage` and `broadenIssues` hold, via the same helper. A provider that
276
- // reports another page but hands back neither `endCursor` nor `nextPage` (surfaced as the `'{}'` sentinel,
277
- // which `toProviderPageInfo` drops) is terminal-but-incomplete: `hasMore: false` + `page.truncated`.
278
- // Synthesizing a page-number cursor for a cursor-only host instead — which is what this read used to do
279
- // unconditionally — handed back a continuation the provider ignores, so it answered with its FIRST page
280
- // again while still reporting `hasMore: true`. A consumer draining until `hasMore` clears (Kepler's repo
281
- // drain does exactly that) then looped to its own page cap, accumulating a duplicate copy of every repo
282
- // per round, and never saw a truncation signal.
283
- const continuation = resolveContinuation(paged, pageAdvanceable ? currentPage + 1 : undefined);
284
- // The org-hierarchy read can also stop at a defensive backstop with more repos unlisted and no cursor to
285
- // resume (top-level `truncated`, or `paging.truncated` on a single-page read). Metadata incompleteness and
286
- // a demoted continuation are two further, independent sources of the same signal.
287
- const truncated = (value?.truncated ?? false) ||
288
- (value?.paging?.truncated ?? false) ||
289
- assessment.truncated ||
290
- continuation.truncated;
291
- const result = {
292
- // Normalize the raw provider-apis repos to the GitLens-owned shape at the surface boundary.
293
- items: items.map(toProviderRepositoryShape),
294
- warnings: warnings,
295
- page: { ...paged.page, currentPage: currentPage, truncated: truncated || undefined },
296
- hasMore: continuation.hasMore,
297
- cursor: continuation.cursor,
298
- fetchFailed: assessment.fetchFailed || (warning != null && value == null) || undefined,
212
+ }), { warnOnMissingSession: warnOnMissingSession });
213
+ /**
214
+ * Builds one page's result from what the provider returned. Shared by the initial read and by every round of
215
+ * the cursor walk below, so a walked page N is described by exactly the same rules as a directly-requested one
216
+ * (position, continuation, truncation) rather than by a second copy of them.
217
+ */
218
+ const toResult = ({ value, warning }, requestedPage, suppliedCursor) => {
219
+ const items = value?.values ?? [];
220
+ const warnings = warning != null ? [warning] : [];
221
+ // The repos read core is cursor-only and can't accept a page size, so don't echo the requested
222
+ // `itemsPerPage` as if it were applied report what the provider returned (its own pageSize when
223
+ // available, else the actual item count).
224
+ const paged = toProviderPageInfo(items.length, value?.paging);
225
+ // Convert the SDK collection metadata into scope-aware warnings + failure/truncation flags, appending
226
+ // them to any captured thrown-error warning without discarding the partial result's items.
227
+ const assessment = mergeAssessmentInto(warnings, options.providerId, domain, options.connectionId, value?.metadata);
228
+ // Whether this read honors a page NUMBER, decided from what the provider actually reported rather than
229
+ // guessed from the absence of a cursor. A numbered-page repos host reports its position (`paging.page`)
230
+ // and/or its successor (`paging.nextPage`) Bitbucket's workspace walk consumes `page` as a real 1-based
231
+ // page and reports `nextPage` without echoing `currentPage`, so both signals have to count. Every wired
232
+ // cursor-based repos read (GitHub's org/user walks, GitLab's user walk, Bitbucket's cursor read) reports
233
+ // neither. Keying off `paged.cursor == null` instead read the paging layer's "reported another page,
234
+ // handed back no continuation" sentinel as evidence of a numbered host, which is exactly backwards.
235
+ const pageAdvanceable = value?.paging?.page != null || value?.paging?.nextPage != null;
236
+ // Numbered-page hosts that don't echo `currentPage` may still be advanced by the requested `page` (initial
237
+ // read) or by the cursor the caller threaded back. A cursor-only host ignores an UNTHREADED `page`
238
+ // request, so its page-less first page is page 1.
239
+ const currentPage = resolveCurrentPage({
240
+ providerPage: paged.page.currentPage,
241
+ requestedPage: requestedPage,
242
+ suppliedCursor: suppliedCursor,
243
+ pageAdvanceable: pageAdvanceable,
244
+ });
245
+ // Never advertise `hasMore` without a continuation the caller can act on — the same contract
246
+ // `listPullRequestsPage`, `listIssuesPage` and `broadenIssues` hold, via the same helper. A provider that
247
+ // reports another page but hands back neither `endCursor` nor `nextPage` (surfaced as the `'{}'` sentinel,
248
+ // which `toProviderPageInfo` drops) is terminal-but-incomplete: `hasMore: false` + `page.truncated`.
249
+ // Synthesizing a page-number cursor for a cursor-only host instead which is what this read used to do
250
+ // unconditionally handed back a continuation the provider ignores, so it answered with its FIRST page
251
+ // again while still reporting `hasMore: true`. A consumer draining until `hasMore` clears (Kepler's repo
252
+ // drain does exactly that) then looped to its own page cap, accumulating a duplicate copy of every repo
253
+ // per round, and never saw a truncation signal.
254
+ const continuation = resolveContinuation(paged, pageAdvanceable ? currentPage + 1 : undefined);
255
+ // The org-hierarchy read can also stop at a defensive backstop with more repos unlisted and no cursor to
256
+ // resume (top-level `truncated`, or `paging.truncated` on a single-page read). Metadata incompleteness and
257
+ // a demoted continuation are two further, independent sources of the same signal.
258
+ const truncated = (value?.truncated ?? false) ||
259
+ (value?.paging?.truncated ?? false) ||
260
+ assessment.truncated ||
261
+ continuation.truncated;
262
+ return {
263
+ // Normalize the raw provider-apis repos to the GitLens-owned shape at the surface boundary.
264
+ items: items.map(toProviderRepositoryShape),
265
+ warnings: warnings,
266
+ page: { ...paged.page, currentPage: currentPage, truncated: truncated || undefined },
267
+ hasMore: continuation.hasMore,
268
+ cursor: continuation.cursor,
269
+ fetchFailed: assessment.fetchFailed || (warning != null && value == null) || undefined,
270
+ };
299
271
  };
300
- // A cursor-only host ignores the synthesized page cursor above and returns page 1. Detect that from
301
- // the provider's own paging metadata, then advance through its real continuations. Numbered hosts
302
- // keep their one-request path because `pageAdvanceable` is true.
303
- if (options.cursor == null && page > 1 && !pageAdvanceable) {
304
- const traversalWarnings = [...result.warnings];
305
- let traversalFetchFailed = result.fetchFailed === true;
306
- let traversalTruncated = result.page.truncated === true;
307
- let previous = result;
308
- for (let currentPage = 2; currentPage <= page; currentPage++) {
309
- if (!previous.hasMore || previous.cursor == null) {
310
- return {
311
- items: [],
312
- warnings: traversalWarnings,
313
- page: {
314
- currentPage: page,
315
- itemsPerPage: 0,
316
- truncated: traversalTruncated || undefined,
317
- },
318
- hasMore: false,
319
- fetchFailed: traversalFetchFailed || undefined,
320
- };
321
- }
322
- const requested = await listRepos(ctx, {
323
- ...options,
324
- page: currentPage,
325
- cursor: previous.cursor,
326
- });
327
- for (const traversalWarning of requested.warnings) {
328
- appendDedupedWarning(traversalWarnings, traversalWarning);
329
- }
330
- traversalFetchFailed ||= requested.fetchFailed === true;
331
- traversalTruncated ||= requested.page.truncated === true;
332
- if (currentPage === page) {
333
- return {
334
- ...requested,
335
- warnings: traversalWarnings,
336
- page: {
337
- ...requested.page,
338
- truncated: traversalTruncated || undefined,
339
- },
340
- fetchFailed: traversalFetchFailed || undefined,
341
- };
342
- }
343
- previous = requested;
272
+ const first = await readPage(options.cursor ?? pageToCursor(page));
273
+ const result = toResult(first, page, options.cursor);
274
+ // A numbered-page host honored the synthesized cursor, so this IS page N; a cursor-only host ignored it and
275
+ // answered with page 1, which the walk below advances. Decided from the provider's own paging metadata rather
276
+ // than assumed, hence after the read.
277
+ const pageAdvanceable = first.value?.paging?.page != null || first.value?.paging?.nextPage != null;
278
+ if (options.cursor != null || page === 1 || pageAdvanceable)
279
+ return result;
280
+ // Walk the provider's real continuations to the requested page. Only the last page's items are kept — pages
281
+ // 1..N returned as "page N" would duplicate items for a normal paged consumer — while warnings, truncation,
282
+ // and failure accumulate across the whole walked prefix, since an earlier round's problem still means this
283
+ // result isn't authoritative. The provider read is re-issued per round, but the integration is resolved once:
284
+ // re-entering this function per page would repeat its auth resolution N times for page N.
285
+ const walkedWarnings = [...result.warnings];
286
+ let walkedFetchFailed = result.fetchFailed === true;
287
+ let walkedTruncated = result.page.truncated === true;
288
+ let previous = result;
289
+ for (let currentPage = 2; currentPage <= page; currentPage++) {
290
+ if (!previous.hasMore || previous.cursor == null) {
291
+ // The requested page lies past the provider's terminal cursor: an EMPTY page N, never the last
292
+ // available page relabeled (see ProviderPageInfo.currentPage).
293
+ return {
294
+ items: [],
295
+ warnings: walkedWarnings,
296
+ page: { currentPage: page, itemsPerPage: 0, truncated: walkedTruncated || undefined },
297
+ hasMore: false,
298
+ fetchFailed: walkedFetchFailed || undefined,
299
+ };
300
+ }
301
+ const suppliedCursor = previous.cursor;
302
+ const requested = toResult(await readPage(suppliedCursor), currentPage, suppliedCursor);
303
+ for (const warning of requested.warnings) {
304
+ appendDedupedWarning(walkedWarnings, warning);
305
+ }
306
+ walkedFetchFailed ||= requested.fetchFailed === true;
307
+ walkedTruncated ||= requested.page.truncated === true;
308
+ if (currentPage === page) {
309
+ return {
310
+ ...requested,
311
+ warnings: walkedWarnings,
312
+ page: { ...requested.page, truncated: walkedTruncated || undefined },
313
+ fetchFailed: walkedFetchFailed || undefined,
314
+ };
344
315
  }
316
+ previous = requested;
345
317
  }
346
318
  return result;
347
319
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EACN,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,mCAAmC,EACnC,yCAAyC,GACzC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAQnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACN,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,GAC7B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACN,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrH,OAAO,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,GAAwB,EACxB,OAAyB;IAEzB,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC;IACrG,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAErE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;QAC3E,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACzB,2FAA2F;YAC3F,wFAAwF;YACxF,sFAAsF;YACtF,MAAM,KAAK,GAAG,GAAG,CAAC,6BAA6B,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YACnF,OAAO;gBACN,KAAK,EAAE,EAA4B;gBACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC9B,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACjF,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAChF,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,wFAAwF;YACxF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CACtD,EAAE,EACF,MAAM,EACN,YAAY,EACZ,GAAG,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY,CAAC,EACzD,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAC9C,CAAC;YACF,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,wEAAwE;gBACxE,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;oBACvB,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAC;YACvD,0FAA0F;YAC1F,0FAA0F;YAC1F,8CAA8C;YAC9C,WAAW,GAAG,IAAI,CAAC;YACnB,QAAQ,CAAC,IAAI,CACZ,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,+CAA+C,EAAE,IAAI,CAAC,CAC7F,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAC3C,EAAE,EACF,MAAM,EACN,YAAY,EACZ,GAAG,EAAE,CAAC,WAAW,CAAC,6BAA6B,CAAC,YAAY,CAAC,EAC7D,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAC9C,CAAC;YACF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACrB,QAAQ,CAAC,IAAI,CACZ,YAAY,CACX,EAAE,EACF,MAAM,EACN,YAAY,EACZ,gFAAgF,CAChF,CACD,CAAC;oBACF,kFAAkF;oBAClF,sFAAsF;oBACtF,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;gBAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC3F,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;YACD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBACnB,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,GAAwB,EACxB,OAA6B;IAE7B,yBAAyB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,GAAG,GACR,OAAO,EAAE,UAAU,IAAI,IAAI;QAC1B,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACtB,CAAC,CAAC;YACA,GAAG,yCAAyC;YAC5C,yBAAyB,CAAC,WAAW;YACrC,+BAA+B,CAAC,iBAAiB;SACjD,CAAC;IACL,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAErE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;QAC3E,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACzB,4FAA4F;YAC5F,wFAAwF;YACxF,MAAM,KAAK,GAAG,GAAG,CAAC,6BAA6B,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YACnF,OAAO;gBACN,KAAK,EAAE,EAA4B;gBACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC9B,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,CAAC;QACzB,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAEhF,+FAA+F;QAC/F,6FAA6F;QAC7F,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,4FAA4F;YAC5F,6FAA6F;YAC7F,8FAA8F;YAC9F,yEAAyE;YACzE,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACjE,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CACrD,EAAE,EACF,MAAM,EACN,YAAY,EACZ,GAAG,EAAE,CAAC,WAAW,CAAC,uBAAuB,CAAC,GAAG,EAAE,YAAY,CAAC,EAC5D,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAC9C,CAAC;YACF,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACtB,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;YACD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEhF,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACxB,QAAQ,CAAC,IAAI,CACZ,YAAY,CACX,EAAE,EACF,MAAM,EACN,YAAY,EACZ,2EAA2E,CAC3E,CACD,CAAC;oBACF,qFAAqF;oBACrF,8EAA8E;oBAC9E,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;gBAED,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9F,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;oBACpD,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,WAAW,CACxE,EAAE,EACF,MAAM,EACN,YAAY,EACZ,GAAG,EAAE,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY,CAAC,EACzD,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAC9C,CAAC;QACF,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAChC,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;gBACvB,WAAW,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC;QAED,MAAM,eAAe,GACpB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,IAAI,eAAe,IAAI,IAAI,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CACtG,WAAW,CAAC,yCAAyC,CAAC,eAAe,EAAE,YAAY,CAAC,CACpF,CAAC;YACF,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACtB,WAAW,GAAG,IAAI,CAAC;gBACpB,CAAC;YACF,CAAC;YACD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CACT,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAChC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CACvE,CACD,CAAC;YACH,CAAC;YACD,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/F,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACpD,WAAW,GAAG,IAAI,CAAC;YACpB,CAAC;QACF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,GAAwB,EACxB,OASC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5C,IAAI,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACnD,OAAO,WAAW,CACjB,IAAI,EACJ,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC,EACxG,IAAI,CACJ,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9G,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACzB,qGAAqG;QACrG,iFAAiF;QACjF,MAAM,KAAK,GAAG,GAAG,CAAC,6BAA6B,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1G,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,OAAO,WAAW,CACjB,IAAI,EACJ,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC,EACxG,IAAI,CACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAExG,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW;QAC5B,CAAC,CAAC,WAAW,CAAC,+BAA+B;QAC7C,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,kGAAkG;QAClG,qGAAqG;QACrG,qGAAqG;QACrG,yCAAyC;QACzC,OAAO,WAAW,CACjB,IAAI,EACJ;YACC,YAAY,CACX,OAAO,CAAC,UAAU,EAClB,MAAM,EACN,OAAO,CAAC,YAAY,EACpB,WAAW;gBACV,CAAC,CAAC,0DAA0D,OAAO,CAAC,UAAU,uCAAuC;gBACrH,CAAC,CAAC,6CAA6C,OAAO,CAAC,UAAU,IAAI,CACtE;SACD,EACD,IAAI,CACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,CAAC,MAA0B,EAAE,EAAE,CAC/C,WAAW,CACV,OAAO,CAAC,UAAU,EAClB,MAAM,EACN,OAAO,CAAC,YAAY,EACpB,GAAG,EAAE,CACJ,GAAG,IAAI,IAAI;QACV,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAClG,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,GAAG,EAAE;YAC7C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,OAAO,CAAC,YAAY;SAClC,CAAC,EACL,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAC9C,CAAC;IAEH;;;;OAIG;IACH,MAAM,QAAQ,GAAG,CAChB,EAAE,KAAK,EAAE,OAAO,EAAwC,EACxD,aAAqB,EACrB,cAAkC,EACa,EAAE;QACjD,MAAM,KAAK,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,+FAA+F;QAC/F,kGAAkG;QAClG,0CAA0C;QAC1C,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,sGAAsG;QACtG,2FAA2F;QAC3F,MAAM,UAAU,GAAG,mBAAmB,CACrC,QAAQ,EACR,OAAO,CAAC,UAAU,EAClB,MAAM,EACN,OAAO,CAAC,YAAY,EACpB,KAAK,EAAE,QAAQ,CACf,CAAC;QACF,uGAAuG;QACvG,wGAAwG;QACxG,0GAA0G;QAC1G,wGAAwG;QACxG,yGAAyG;QACzG,qGAAqG;QACrG,oGAAoG;QACpG,MAAM,eAAe,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;QACvF,2GAA2G;QAC3G,mGAAmG;QACnG,kDAAkD;QAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACtC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;YACpC,aAAa,EAAE,aAAa;YAC5B,cAAc,EAAE,cAAc;YAC9B,eAAe,EAAE,eAAe;SAChC,CAAC,CAAC;QACH,6FAA6F;QAC7F,0GAA0G;QAC1G,2GAA2G;QAC3G,qGAAqG;QACrG,wGAAwG;QACxG,wGAAwG;QACxG,yGAAyG;QACzG,wGAAwG;QACxG,gDAAgD;QAChD,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/F,yGAAyG;QACzG,2GAA2G;QAC3G,kFAAkF;QAClF,MAAM,SAAS,GACd,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC;YAC3B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC;YACnC,UAAU,CAAC,SAAS;YACpB,YAAY,CAAC,SAAS,CAAC;QACxB,OAAO;YACN,4FAA4F;YAC5F,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;YAC3C,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,IAAI,SAAS,EAAE;YACpF,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS;SACtF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,4GAA4G;IAC5G,8GAA8G;IAC9G,sCAAsC;IACtC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;IACnG,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,eAAe;QAAE,OAAO,MAAM,CAAC;IAE3E,4GAA4G;IAC5G,4GAA4G;IAC5G,2GAA2G;IAC3G,8GAA8G;IAC9G,0FAA0F;IAC1F,MAAM,cAAc,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,iBAAiB,GAAG,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;IACpD,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IACrD,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9D,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAClD,+FAA+F;YAC/F,+DAA+D;YAC/D,OAAO;gBACN,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,SAAS,EAAE;gBACrF,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,iBAAiB,IAAI,SAAS;aAC3C,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QACxF,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC1C,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,iBAAiB,KAAK,SAAS,CAAC,WAAW,KAAK,IAAI,CAAC;QACrD,eAAe,KAAK,SAAS,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QACtD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO;gBACN,GAAG,SAAS;gBACZ,QAAQ,EAAE,cAAc;gBACxB,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,IAAI,SAAS,EAAE;gBACpE,WAAW,EAAE,iBAAiB,IAAI,SAAS;aAC3C,CAAC;QACH,CAAC;QAED,QAAQ,GAAG,SAAS,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { ResourceDescriptor } from '../../../git/models/resourceDescriptor.js';
2
2
  import type { IntegrationIds } from '../constants.js';
3
- import type { ProviderOrganization } from '../results.js';
3
+ import type { ProviderOrganization, ProviderResult, ProviderWarning } from '../results.js';
4
4
  /**
5
5
  * Mapping of a provider's own hierarchy vocabulary onto the single {@link ProviderOrganization} shape the facade
6
6
  * publishes.
@@ -19,6 +19,18 @@ import type { ProviderOrganization } from '../results.js';
19
19
  export declare function resourceLabel(resource: ResourceDescriptor): string;
20
20
  /** Whether `org` addresses this resource by any of the identifiers a caller could reasonably have. */
21
21
  export declare function resourceMatchesOrg(resource: ResourceDescriptor, org: string): boolean;
22
+ /**
23
+ * The id of the RESOURCE a project belongs to, used to look up which account (and therefore which user) that
24
+ * project's issues should be scoped to. Falls back through the project's own identifiers because some providers
25
+ * (and test doubles) return project descriptors without naming their parent.
26
+ */
27
+ export declare function resourceIdForProject(project: ResourceDescriptor): string | undefined;
28
+ /**
29
+ * A stable identity for one project across facade pages, for the retry/completed bookkeeping an issue-tracker
30
+ * cursor carries. All three identifiers are included rather than one preferred value: two trackers can reuse the
31
+ * same project id, so keying on a single field would collapse them into one entry.
32
+ */
33
+ export declare function projectKey(project: ResourceDescriptor): string;
22
34
  /**
23
35
  * Maps an issue-tracker resource descriptor to the unified {@link ProviderOrganization} org shape. `url` is
24
36
  * synthesized when the descriptor carries none, rather than widening the shared `ProviderOrganization.url` to
@@ -39,6 +51,18 @@ export declare function orgForProject(providerId: IntegrationIds, project: Resou
39
51
  * client serves several — so the fan-out attributes it here.
40
52
  */
41
53
  export declare function withProviderContext(providerId: IntegrationIds, item: ProviderOrganization): ProviderOrganization;
54
+ /**
55
+ * Merges the per-provider slices of a hierarchy fan-out into one flat result.
56
+ *
57
+ * `ProviderResult` has no page object, so `fetchFailed` is its only non-authoritative signal — any slice that
58
+ * failed or came back incomplete has to set it, or a caller would treat a short list as the whole account.
59
+ * Warnings are deduped because the same account can surface under two ids in one fan-out.
60
+ */
61
+ export declare function mergeHierarchyResults<T>(results: readonly ({
62
+ items: T[];
63
+ warnings: ProviderWarning[];
64
+ fetchFailed: boolean;
65
+ } | undefined)[]): ProviderResult<T>;
42
66
  /**
43
67
  * Rejects a hierarchy read whose scoped selectors have no provider to apply to. `connectionId` and `domain`
44
68
  * both select among the connections OF a provider, so either one without `providerId` is ambiguous rather than
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.utils.d.ts","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE7G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AAEH,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAGlE;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGrF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,CAAC,EAAE,MAAM,GACV,oBAAoB,CAStB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC5B,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,kBAAkB,EAAE,GAC7B,MAAM,GAAG,SAAS,CAcpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,CAMhH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAC1F,IAAI,CAIN"}
1
+ {"version":3,"file":"hierarchy.utils.d.ts","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE7G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG3F;;;;;;;;;;;;;GAaG;AAEH,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAGlE;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGrF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAGpF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAG9D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,CAAC,EAAE,MAAM,GACV,oBAAoB,CAStB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC5B,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,kBAAkB,EAAE,GAC7B,MAAM,GAAG,SAAS,CAcpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,CAMhH;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACtC,OAAO,EAAE,SAAS,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,EAAE,GACjG,cAAc,CAAC,CAAC,CAAC,CAiBnB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,UAAU,GAAG,cAAc,EACnC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,cAAc,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAC1F,IAAI,CAIN"}
@@ -1,4 +1,5 @@
1
1
  import { IssuesCloudHostIntegrationId } from '../constants.js';
2
+ import { appendDedupedWarning } from '../results.js';
2
3
  /**
3
4
  * Mapping of a provider's own hierarchy vocabulary onto the single {@link ProviderOrganization} shape the facade
4
5
  * publishes.
@@ -23,6 +24,24 @@ export function resourceMatchesOrg(resource, org) {
23
24
  const typed = resource;
24
25
  return resource.key === org || typed.id === org || typed.name === org;
25
26
  }
27
+ /**
28
+ * The id of the RESOURCE a project belongs to, used to look up which account (and therefore which user) that
29
+ * project's issues should be scoped to. Falls back through the project's own identifiers because some providers
30
+ * (and test doubles) return project descriptors without naming their parent.
31
+ */
32
+ export function resourceIdForProject(project) {
33
+ const typed = project;
34
+ return typed.resourceId ?? typed.id ?? project.key;
35
+ }
36
+ /**
37
+ * A stable identity for one project across facade pages, for the retry/completed bookkeeping an issue-tracker
38
+ * cursor carries. All three identifiers are included rather than one preferred value: two trackers can reuse the
39
+ * same project id, so keying on a single field would collapse them into one entry.
40
+ */
41
+ export function projectKey(project) {
42
+ const typed = project;
43
+ return JSON.stringify([typed.resourceId ?? '', typed.id ?? '', project.key]);
44
+ }
26
45
  /**
27
46
  * Maps an issue-tracker resource descriptor to the unified {@link ProviderOrganization} org shape. `url` is
28
47
  * synthesized when the descriptor carries none, rather than widening the shared `ProviderOrganization.url` to
@@ -71,6 +90,30 @@ export function withProviderContext(providerId, item) {
71
90
  ...(item.org != null ? { org: item.org } : {}),
72
91
  };
73
92
  }
93
+ /**
94
+ * Merges the per-provider slices of a hierarchy fan-out into one flat result.
95
+ *
96
+ * `ProviderResult` has no page object, so `fetchFailed` is its only non-authoritative signal — any slice that
97
+ * failed or came back incomplete has to set it, or a caller would treat a short list as the whole account.
98
+ * Warnings are deduped because the same account can surface under two ids in one fan-out.
99
+ */
100
+ export function mergeHierarchyResults(results) {
101
+ const items = [];
102
+ const warnings = [];
103
+ let fetchFailed = false;
104
+ for (const result of results) {
105
+ if (result == null)
106
+ continue;
107
+ items.push(...result.items);
108
+ for (const warning of result.warnings) {
109
+ appendDedupedWarning(warnings, warning);
110
+ }
111
+ if (result.fetchFailed) {
112
+ fetchFailed = true;
113
+ }
114
+ }
115
+ return { items: items, warnings: warnings, fetchFailed: fetchFailed || undefined };
116
+ }
74
117
  /**
75
118
  * Rejects a hierarchy read whose scoped selectors have no provider to apply to. `connectionId` and `domain`
76
119
  * both select among the connections OF a provider, so either one without `providerId` is ambiguous rather than
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.utils.js","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAI/D;;;;;;;;;;;;;GAaG;AAEH,oGAAoG;AACpG,MAAM,UAAU,aAAa,CAAC,QAA4B;IACzD,MAAM,KAAK,GAAG,QAAmC,CAAC;IAClD,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,kBAAkB,CAAC,QAA4B,EAAE,GAAW;IAC3E,MAAM,KAAK,GAAG,QAAmC,CAAC;IAClD,OAAO,QAAQ,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC5B,UAA0B,EAC1B,QAA4B,EAC5B,GAAY;IAEZ,MAAM,KAAK,GAAG,QAAsD,CAAC;IACrE,OAAO;QACN,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,QAAQ,CAAC,GAAG;QAC5B,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC;QAC7B,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;KACpB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC5B,UAA0B,EAC1B,OAA2B,EAC3B,SAA+B;IAE/B,IAAI,UAAU,KAAK,4BAA4B,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAEzE,MAAM,YAAY,GAAG,OAA4D,CAAC;IAClF,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC;SACzE,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;SACjD,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;SACrF,IAAI,CAAC,CAAC,QAAQ,EAAkC,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAEvE,OAAO,WAAW,IAAI,IAAI;QACzB,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC;QAC5B,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,SAAS,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA0B,EAAE,IAA0B;IACzF,OAAO;QACN,GAAG,IAAI;QACP,UAAU,EAAE,UAAU;QACtB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACxC,MAAmC,EACnC,OAA4F;IAE5F,IAAI,OAAO,EAAE,UAAU,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,IAAI,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,SAAS,CAAC,IAAI,MAAM,qEAAqE,CAAC,CAAC;IACtG,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"hierarchy.utils.js","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/hierarchy.utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { IssueShape } from '../../../git/models/issue.js';
2
- import { type IntegrationIds } from '../constants.js';
2
+ import type { IntegrationIds } from '../constants.js';
3
3
  import { IssueFilter } from '../providers/models.js';
4
4
  import type { ProviderPagedResult } from '../results.js';
5
5
  import type { ProviderReadContext } from './context.js';
@@ -1 +1 @@
1
- {"version":3,"file":"issueTracker.d.ts","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/issueTracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,eAAe,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMxD,wBAAsB,0BAA0B,CAC/C,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE;IACR,UAAU,EAAE,cAAc,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GACC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CA+b1C"}
1
+ {"version":3,"file":"issueTracker.d.ts","sourceRoot":"","sources":["../../../../src/plus/integrations/reads/issueTracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAqB,MAAM,wBAAwB,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,eAAe,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMxD,wBAAsB,0BAA0B,CAC/C,GAAG,EAAE,mBAAmB,EACxB,OAAO,EAAE;IACR,UAAU,EAAE,cAAc,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,wFAAwF;IACxF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GACC,OAAO,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAkb1C"}
@@ -7,7 +7,7 @@ import { mergeCollectionMetadata, parsePageCursor } from '../providers/utils/pro
7
7
  import { isIssuesHostIntegrationId } from '../utils/integration.utils.js';
8
8
  import { parseIssueTrackerPageCursor, toIssueTrackerPageCursor } from './cursors.js';
9
9
  import { runCaptured } from './drains.js';
10
- import { resourceMatchesOrg } from './hierarchy.utils.js';
10
+ import { projectKey, resourceIdForProject, resourceLabel, resourceMatchesOrg } from './hierarchy.utils.js';
11
11
  import { issueTrackerOnlySurfaceWarning, otherWarning } from './warnings.js';
12
12
  export async function listIssueTrackerIssuesPage(ctx, options) {
13
13
  // Pagination is opt-in: only window the projects when the caller actually asked to page. A caller that
@@ -127,18 +127,6 @@ export async function listIssueTrackerIssuesPage(ctx, options) {
127
127
  warnings.push(otherWarning(options.providerId, domain, options.connectionId, `\`includeAllAssignees\` cannot be combined with an author/mention filter for '${options.providerId}' (those filters require a user scope).`));
128
128
  return emptyPage(true);
129
129
  }
130
- const resourceIdForProject = (project) => {
131
- const issueProject = project;
132
- return issueProject.resourceId ?? issueProject.id ?? issueProject.key;
133
- };
134
- const retryKeyForProject = (project) => {
135
- const issueProject = project;
136
- return JSON.stringify([issueProject.resourceId ?? '', issueProject.id ?? '', issueProject.key]);
137
- };
138
- const labelForResource = (resource) => {
139
- const issueResource = resource;
140
- return issueResource.name ?? issueResource.id ?? issueResource.key;
141
- };
142
130
  // Scope to the current user's assigned issues unless the caller broadens to all assignees. Resolve the
143
131
  // handle from each resource's own account (multi-account safe), capturing any error so its kind
144
132
  // (e.g. auth) is preserved rather than collapsed to a generic warning.
@@ -157,7 +145,7 @@ export async function listIssueTrackerIssuesPage(ctx, options) {
157
145
  continue;
158
146
  }
159
147
  warnings.push(accountWarning ??
160
- otherWarning(options.providerId, domain, options.connectionId, `Could not resolve the current user for '${labelForResource(resource)}'; skipping that resource to avoid returning issues assigned to others.`));
148
+ otherWarning(options.providerId, domain, options.connectionId, `Could not resolve the current user for '${resourceLabel(resource)}'; skipping that resource to avoid returning issues assigned to others.`));
161
149
  accountLookupFailed = true;
162
150
  }
163
151
  }
@@ -185,21 +173,21 @@ export async function listIssueTrackerIssuesPage(ctx, options) {
185
173
  ? matchedProjects.filter(project => {
186
174
  if (userForProject(project) != null)
187
175
  return true;
188
- const projectKey = retryKeyForProject(project);
189
- retryProjectKeys.add(projectKey);
190
- completedProjectKeys.delete(projectKey);
176
+ const key = projectKey(project);
177
+ retryProjectKeys.add(key);
178
+ completedProjectKeys.delete(key);
191
179
  return false;
192
180
  })
193
181
  : matchedProjects;
194
182
  // Select the untouched window plus any earlier windows/projects that explicitly need retrying. Keys
195
183
  // include the parent resource so two trackers can reuse the same project id without collapsing.
196
- const projectsByRetryKey = new Map(scopedProjectsWithUsers.map(project => [retryKeyForProject(project), project]));
184
+ const projectsByRetryKey = new Map(scopedProjectsWithUsers.map(project => [projectKey(project), project]));
197
185
  const scopedProjectsByKey = new Map();
198
186
  const addScopedProject = (project) => {
199
- const projectKey = retryKeyForProject(project);
200
- if (completedProjectKeys.has(projectKey))
187
+ const key = projectKey(project);
188
+ if (completedProjectKeys.has(key))
201
189
  return;
202
- scopedProjectsByKey.set(projectKey, project);
190
+ scopedProjectsByKey.set(key, project);
203
191
  };
204
192
  for (const retryProject of priorRetryProjects) {
205
193
  const project = projectsByRetryKey.get(retryProject);
@@ -277,7 +265,7 @@ export async function listIssueTrackerIssuesPage(ctx, options) {
277
265
  let projectTruncated = projectDiscoveryTruncated;
278
266
  let drainMetadata;
279
267
  for (const { project, value: result, warning } of perProject) {
280
- const projectKey = retryKeyForProject(project);
268
+ const key = projectKey(project);
281
269
  const retryProject = result == null;
282
270
  if (warning != null) {
283
271
  warnings.push(warning);
@@ -299,14 +287,14 @@ export async function listIssueTrackerIssuesPage(ctx, options) {
299
287
  }
300
288
  }
301
289
  if (retryProject) {
302
- retryProjectKeys.add(projectKey);
303
- completedProjectKeys.delete(projectKey);
290
+ retryProjectKeys.add(key);
291
+ completedProjectKeys.delete(key);
304
292
  }
305
293
  else {
306
294
  // A usable partial/truncated project is emitted once and remains structurally incomplete.
307
295
  // Re-running the same project cursor would normally return the same prefix and duplicate it
308
296
  // across facade pages; only a project that returned no value is safe to retry automatically.
309
- completedProjectKeys.add(projectKey);
297
+ completedProjectKeys.add(key);
310
298
  }
311
299
  }
312
300
  const drainAssessment = mergeAssessmentInto(warnings, options.providerId, domain, options.connectionId, drainMetadata);