@gitkraken/core-gitlens 0.5.108 → 0.5.110
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/CHANGELOG.md +49 -1
- package/dist/git/models/issue.d.ts +70 -0
- package/dist/git/models/issue.d.ts.map +1 -1
- package/dist/git/models/issue.js +17 -0
- package/dist/git/models/issue.js.map +1 -1
- package/dist/git/models/pullRequest.d.ts +81 -0
- package/dist/git/models/pullRequest.d.ts.map +1 -1
- package/dist/git/models/pullRequest.js +15 -0
- package/dist/git/models/pullRequest.js.map +1 -1
- package/dist/git/utils/issue.utils.d.ts +41 -1
- package/dist/git/utils/issue.utils.d.ts.map +1 -1
- package/dist/git/utils/issue.utils.js +80 -0
- package/dist/git/utils/issue.utils.js.map +1 -1
- package/dist/git/utils/pullRequest.utils.d.ts +11 -1
- package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/pullRequest.utils.js +40 -0
- package/dist/git/utils/pullRequest.utils.js.map +1 -1
- package/dist/plus/git-github/api/github.d.ts +70 -10
- package/dist/plus/git-github/api/github.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.js +284 -31
- package/dist/plus/git-github/api/github.js.map +1 -1
- package/dist/plus/git-github/api/issueSearchQuery.d.ts +49 -5
- package/dist/plus/git-github/api/issueSearchQuery.d.ts.map +1 -1
- package/dist/plus/git-github/api/issueSearchQuery.js +64 -6
- package/dist/plus/git-github/api/issueSearchQuery.js.map +1 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts +27 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.d.ts.map +1 -1
- package/dist/plus/git-github/api/pullRequestSearchQuery.js +73 -6
- package/dist/plus/git-github/api/pullRequestSearchQuery.js.map +1 -1
- package/dist/plus/git-github/models.d.ts +17 -5
- package/dist/plus/git-github/models.d.ts.map +1 -1
- package/dist/plus/git-github/models.js +14 -1
- package/dist/plus/git-github/models.js.map +1 -1
- package/dist/plus/integrations/collectionMetadata.d.ts +18 -0
- package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -1
- package/dist/plus/integrations/collectionMetadata.js +24 -0
- package/dist/plus/integrations/collectionMetadata.js.map +1 -1
- package/dist/plus/integrations/integrationService.d.ts +31 -10
- package/dist/plus/integrations/integrationService.d.ts.map +1 -1
- package/dist/plus/integrations/integrationService.js +9 -1
- package/dist/plus/integrations/integrationService.js.map +1 -1
- package/dist/plus/integrations/manager.d.ts +85 -31
- package/dist/plus/integrations/manager.d.ts.map +1 -1
- package/dist/plus/integrations/models/gitHostIntegration.d.ts +18 -31
- package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -1
- package/dist/plus/integrations/models/gitHostIntegration.js +29 -1
- package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
- package/dist/plus/integrations/models/integration.d.ts +1 -1
- package/dist/plus/integrations/models/integration.d.ts.map +1 -1
- package/dist/plus/integrations/models/integration.js.map +1 -1
- package/dist/plus/integrations/models/issueReads.d.ts +63 -1
- package/dist/plus/integrations/models/issueReads.d.ts.map +1 -1
- package/dist/plus/integrations/models/issuesIntegration.d.ts +7 -21
- package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -1
- package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
- package/dist/plus/integrations/providerFilters.d.ts +2 -2
- package/dist/plus/integrations/providerFilters.d.ts.map +1 -1
- package/dist/plus/integrations/providers/accounts.d.ts +6 -0
- package/dist/plus/integrations/providers/accounts.d.ts.map +1 -0
- package/dist/plus/integrations/providers/accounts.js +30 -0
- package/dist/plus/integrations/providers/accounts.js.map +1 -0
- package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -1
- package/dist/plus/integrations/providers/azureDevOps.js +1 -0
- package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
- package/dist/plus/integrations/providers/github.d.ts +9 -0
- package/dist/plus/integrations/providers/github.d.ts.map +1 -1
- package/dist/plus/integrations/providers/github.js +115 -135
- package/dist/plus/integrations/providers/github.js.map +1 -1
- package/dist/plus/integrations/providers/gitlab.d.ts +9 -0
- package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -1
- package/dist/plus/integrations/providers/gitlab.js +24 -4
- package/dist/plus/integrations/providers/gitlab.js.map +1 -1
- package/dist/plus/integrations/providers/issueSorts.d.ts +36 -0
- package/dist/plus/integrations/providers/issueSorts.d.ts.map +1 -0
- package/dist/plus/integrations/providers/issueSorts.js +76 -0
- package/dist/plus/integrations/providers/issueSorts.js.map +1 -0
- package/dist/plus/integrations/providers/jira.d.ts +3 -9
- package/dist/plus/integrations/providers/jira.d.ts.map +1 -1
- package/dist/plus/integrations/providers/jira.js +5 -1
- package/dist/plus/integrations/providers/jira.js.map +1 -1
- package/dist/plus/integrations/providers/linear.d.ts +24 -9
- package/dist/plus/integrations/providers/linear.d.ts.map +1 -1
- package/dist/plus/integrations/providers/linear.js +63 -5
- package/dist/plus/integrations/providers/linear.js.map +1 -1
- package/dist/plus/integrations/providers/models.d.ts +76 -38
- package/dist/plus/integrations/providers/models.d.ts.map +1 -1
- package/dist/plus/integrations/providers/models.js +91 -105
- package/dist/plus/integrations/providers/models.js.map +1 -1
- package/dist/plus/integrations/providers/providersApi.d.ts +18 -3
- package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -1
- package/dist/plus/integrations/providers/providersApi.js +24 -7
- package/dist/plus/integrations/providers/providersApi.js.map +1 -1
- package/dist/plus/integrations/providers/pullRequestReviews.d.ts +50 -0
- package/dist/plus/integrations/providers/pullRequestReviews.d.ts.map +1 -0
- package/dist/plus/integrations/providers/pullRequestReviews.js +99 -0
- package/dist/plus/integrations/providers/pullRequestReviews.js.map +1 -0
- package/dist/plus/integrations/providers/trello.d.ts +3 -9
- package/dist/plus/integrations/providers/trello.d.ts.map +1 -1
- package/dist/plus/integrations/providers/trello.js +1 -0
- package/dist/plus/integrations/providers/trello.js.map +1 -1
- package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -1
- package/dist/plus/integrations/providers/utils/providerPaging.js +5 -1
- package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -1
- package/dist/plus/integrations/reads/broaden.d.ts +6 -0
- package/dist/plus/integrations/reads/broaden.d.ts.map +1 -1
- package/dist/plus/integrations/reads/broaden.js.map +1 -1
- package/dist/plus/integrations/reads/counts.d.ts +63 -1
- package/dist/plus/integrations/reads/counts.d.ts.map +1 -1
- package/dist/plus/integrations/reads/counts.js +146 -2
- package/dist/plus/integrations/reads/counts.js.map +1 -1
- package/dist/plus/integrations/reads/drains.d.ts +7 -1
- package/dist/plus/integrations/reads/drains.d.ts.map +1 -1
- package/dist/plus/integrations/reads/drains.js +13 -2
- package/dist/plus/integrations/reads/drains.js.map +1 -1
- package/dist/plus/integrations/reads/filters.d.ts +59 -9
- package/dist/plus/integrations/reads/filters.d.ts.map +1 -1
- package/dist/plus/integrations/reads/filters.js +39 -0
- package/dist/plus/integrations/reads/filters.js.map +1 -1
- package/dist/plus/integrations/reads/issueTracker.d.ts +18 -1
- package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -1
- package/dist/plus/integrations/reads/issueTracker.js +40 -3
- package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
- package/dist/plus/integrations/reads/issues.d.ts +27 -3
- package/dist/plus/integrations/reads/issues.d.ts.map +1 -1
- package/dist/plus/integrations/reads/issues.js +223 -123
- package/dist/plus/integrations/reads/issues.js.map +1 -1
- package/dist/plus/integrations/reads/ordering.d.ts +101 -0
- package/dist/plus/integrations/reads/ordering.d.ts.map +1 -0
- package/dist/plus/integrations/reads/ordering.js +48 -0
- package/dist/plus/integrations/reads/ordering.js.map +1 -0
- package/dist/plus/integrations/reads/searchIssues.d.ts +7 -2
- package/dist/plus/integrations/reads/searchIssues.d.ts.map +1 -1
- package/dist/plus/integrations/reads/searchIssues.js +9 -3
- package/dist/plus/integrations/reads/searchIssues.js.map +1 -1
- package/dist/plus/integrations/reads/searchPullRequests.d.ts +4 -3
- package/dist/plus/integrations/reads/searchPullRequests.d.ts.map +1 -1
- package/dist/plus/integrations/reads/searchPullRequests.js +6 -4
- package/dist/plus/integrations/reads/searchPullRequests.js.map +1 -1
- package/dist/plus/integrations/reads/sweeps.js +1 -1
- package/dist/plus/integrations/reads/sweeps.js.map +1 -1
- package/dist/plus/integrations/reads/warnings.d.ts +35 -3
- package/dist/plus/integrations/reads/warnings.d.ts.map +1 -1
- package/dist/plus/integrations/reads/warnings.js +58 -4
- package/dist/plus/integrations/reads/warnings.js.map +1 -1
- package/dist/plus/integrations/results.d.ts +15 -0
- package/dist/plus/integrations/results.d.ts.map +1 -1
- package/dist/plus/integrations/results.js.map +1 -1
- package/docs/integrations.md +76 -10
- package/docs/kepler-read-api-parity.md +9 -0
- package/package.json +2 -2
- package/src/git/models/issue.ts +73 -0
- package/src/git/models/pullRequest.ts +84 -0
- package/src/git/utils/issue.utils.ts +91 -1
- package/src/git/utils/pullRequest.utils.ts +50 -0
- package/src/plus/git-github/api/github.ts +356 -36
- package/src/plus/git-github/api/issueSearchQuery.ts +67 -7
- package/src/plus/git-github/api/pullRequestSearchQuery.ts +81 -7
- package/src/plus/git-github/models.ts +29 -5
- package/src/plus/integrations/collectionMetadata.ts +24 -0
- package/src/plus/integrations/integrationService.ts +40 -12
- package/src/plus/integrations/manager.ts +89 -35
- package/src/plus/integrations/models/gitHostIntegration.ts +47 -31
- package/src/plus/integrations/models/integration.ts +1 -0
- package/src/plus/integrations/models/issueReads.ts +65 -1
- package/src/plus/integrations/models/issuesIntegration.ts +7 -6
- package/src/plus/integrations/providerFilters.ts +8 -1
- package/src/plus/integrations/providers/accounts.ts +34 -0
- package/src/plus/integrations/providers/azureDevOps.ts +1 -0
- package/src/plus/integrations/providers/github.ts +134 -144
- package/src/plus/integrations/providers/gitlab.ts +29 -10
- package/src/plus/integrations/providers/issueSorts.ts +89 -0
- package/src/plus/integrations/providers/jira.ts +9 -3
- package/src/plus/integrations/providers/linear.ts +77 -8
- package/src/plus/integrations/providers/models.ts +185 -128
- package/src/plus/integrations/providers/providersApi.ts +51 -13
- package/src/plus/integrations/providers/pullRequestReviews.ts +122 -0
- package/src/plus/integrations/providers/trello.ts +4 -3
- package/src/plus/integrations/providers/utils/providerPaging.ts +6 -1
- package/src/plus/integrations/reads/broaden.ts +6 -0
- package/src/plus/integrations/reads/counts.ts +281 -3
- package/src/plus/integrations/reads/drains.ts +12 -2
- package/src/plus/integrations/reads/filters.ts +92 -8
- package/src/plus/integrations/reads/issueTracker.ts +78 -4
- package/src/plus/integrations/reads/issues.ts +386 -194
- package/src/plus/integrations/reads/ordering.ts +124 -0
- package/src/plus/integrations/reads/searchIssues.ts +15 -3
- package/src/plus/integrations/reads/searchPullRequests.ts +12 -4
- package/src/plus/integrations/reads/sweeps.ts +1 -1
- package/src/plus/integrations/reads/warnings.ts +84 -2
- package/src/plus/integrations/results.ts +15 -0
|
@@ -12,14 +12,30 @@ import { toTokenWithInfo } from '../authentication/models.js';
|
|
|
12
12
|
import { toCollectionScopeFailure } from '../collectionMetadata.js';
|
|
13
13
|
import { IssuesCloudHostIntegrationId } from '../constants.js';
|
|
14
14
|
import { IntegrationReadUnavailableError } from '../errors.js';
|
|
15
|
+
import type { AccountWideIssuesResult, IssuesForProjectOptions, SearchMyIssuesOptions } from '../models/issueReads.js';
|
|
15
16
|
import { IssuesIntegration } from '../models/issuesIntegration.js';
|
|
16
|
-
import type {
|
|
17
|
+
import type { ProviderApiCollectionResult, ProviderIssue } from './models.js';
|
|
17
18
|
import { fromProviderIssue, providersMetadata, toIssueShape } from './models.js';
|
|
18
19
|
import { mergeCollectionMetadata } from './utils/providerPaging.js';
|
|
19
20
|
|
|
20
21
|
const metadata = providersMetadata[IssuesCloudHostIntegrationId.Linear];
|
|
21
22
|
const authProvider = Object.freeze({ id: metadata.id, scopes: metadata.scopes });
|
|
22
23
|
const maxPagesPerRequest = 10;
|
|
24
|
+
/**
|
|
25
|
+
* The account-wide drain's own backstop, separate from {@link maxPagesPerRequest}.
|
|
26
|
+
*
|
|
27
|
+
* Raised to 50 (5,000 issues at the SDK's 100-per-page) because 10 no longer means what it used to. That read
|
|
28
|
+
* once fanned out over four overlapping relationship queries and merged them, so most of what a page cost was
|
|
29
|
+
* rows already returned — a low budget capped the waste. It is now a single server-ordered query over an `or`
|
|
30
|
+
* filter, so every page is 100 issues the caller has not seen, and the same budget just truncates real results
|
|
31
|
+
* at 1,000.
|
|
32
|
+
*
|
|
33
|
+
* Reaching it is reported rather than silent: {@link LinearIntegration.searchProviderMyIssuesWithTruncation}
|
|
34
|
+
* returns `truncated`, so the facade can say the read was incomplete instead of publishing a capped list as a
|
|
35
|
+
* whole account. The bound stays — a runaway cursor must not spend requests forever — but it is now set where a
|
|
36
|
+
* real Linear account is unlikely to reach it rather than where the duplication used to hurt.
|
|
37
|
+
*/
|
|
38
|
+
const maxAccountWidePagesPerRequest = 50;
|
|
23
39
|
const linearImplicitTeamsPageSize = 50;
|
|
24
40
|
|
|
25
41
|
export interface LinearTeamDescriptor extends IssueResourceDescriptor {
|
|
@@ -194,7 +210,7 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
|
|
|
194
210
|
protected override async getProviderIssuesForProject(
|
|
195
211
|
session: ProviderAuthenticationSession,
|
|
196
212
|
project: ResourceDescriptor,
|
|
197
|
-
options?:
|
|
213
|
+
options?: IssuesForProjectOptions,
|
|
198
214
|
): Promise<IssueShape[] | undefined> {
|
|
199
215
|
return (await this.getProviderIssuesForProjectWithTruncation(session, project, options))?.values;
|
|
200
216
|
}
|
|
@@ -202,7 +218,7 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
|
|
|
202
218
|
protected override async getProviderIssuesForProjectWithTruncation(
|
|
203
219
|
session: ProviderAuthenticationSession,
|
|
204
220
|
project: ResourceDescriptor,
|
|
205
|
-
options?:
|
|
221
|
+
options?: IssuesForProjectOptions,
|
|
206
222
|
): Promise<{ values: IssueShape[]; truncated: boolean; metadata?: CollectionMetadata } | undefined> {
|
|
207
223
|
if (!isIssueResourceDescriptor(project)) return undefined;
|
|
208
224
|
|
|
@@ -222,7 +238,7 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
|
|
|
222
238
|
result = await api.getLinearIssues(
|
|
223
239
|
toTokenWithInfo(this.id, session),
|
|
224
240
|
{ teams: [project.id] },
|
|
225
|
-
{ cursor: cursor },
|
|
241
|
+
{ cursor: cursor, sort: options?.sort },
|
|
226
242
|
);
|
|
227
243
|
} catch (ex) {
|
|
228
244
|
// A page failure after the first page leaves the already-drained prefix intact; record the
|
|
@@ -305,14 +321,45 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
|
|
|
305
321
|
resources?: ResourceDescriptor[],
|
|
306
322
|
cancellation?: AbortSignal,
|
|
307
323
|
): Promise<IssueShape[] | undefined> {
|
|
324
|
+
return (await this.searchProviderMyIssuesWithTruncation(session, resources, cancellation))?.values;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Account-wide "my issues" for Linear, drained to exhaustion and reporting whether it got there.
|
|
329
|
+
*
|
|
330
|
+
* The SDK read is one server-ordered query over an `or` filter across the four relationships (assigned,
|
|
331
|
+
* created, named in an issue's content, named in a comment), so each page is 100 issues the caller has not
|
|
332
|
+
* seen and the pages are ordered as one sequence. Draining it is therefore just following the cursor.
|
|
333
|
+
*
|
|
334
|
+
* Overridden rather than left to the base default because that default hardcodes `truncated: false`, and a
|
|
335
|
+
* bounded drain that stops early is exactly the case a caller must be able to see. Three things end the
|
|
336
|
+
* drain, and only one of them is completion:
|
|
337
|
+
*
|
|
338
|
+
* - the provider says there is no next page — complete;
|
|
339
|
+
* - the backstop is reached — `truncated`, because issues beyond it exist and were not read;
|
|
340
|
+
* - the provider claims a next page but hands back a cursor that does not advance — also `truncated`, since
|
|
341
|
+
* the read cannot continue and the remainder is unreachable rather than absent.
|
|
342
|
+
*
|
|
343
|
+
* Cancellation is deliberately NOT truncation: the caller asked for the read to stop, so the partial list is
|
|
344
|
+
* what it asked for, and flagging it would surface an incompleteness warning for a user action.
|
|
345
|
+
*/
|
|
346
|
+
protected override async searchProviderMyIssuesWithTruncation(
|
|
347
|
+
session: ProviderAuthenticationSession,
|
|
348
|
+
resources?: ResourceDescriptor[],
|
|
349
|
+
cancellation?: AbortSignal,
|
|
350
|
+
options?: SearchMyIssuesOptions,
|
|
351
|
+
): Promise<AccountWideIssuesResult | undefined> {
|
|
308
352
|
if (resources != null) {
|
|
309
353
|
return undefined;
|
|
310
354
|
}
|
|
311
355
|
|
|
312
356
|
const api = await this.getProvidersApi();
|
|
313
357
|
let cursor = undefined;
|
|
314
|
-
|
|
358
|
+
// Starts false so an immediate cancellation, which leaves the loop before the first response, reads as
|
|
359
|
+
// "no more pages known" rather than as an unfinished drain.
|
|
360
|
+
let hasMore = false;
|
|
315
361
|
let requestCount = 0;
|
|
362
|
+
let truncated = false;
|
|
316
363
|
const issues = [];
|
|
317
364
|
try {
|
|
318
365
|
do {
|
|
@@ -322,25 +369,47 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
|
|
|
322
369
|
|
|
323
370
|
const result = await api.getIssuesForCurrentUser(toTokenWithInfo(this.id, session), {
|
|
324
371
|
cursor: cursor,
|
|
372
|
+
sort: options?.sort,
|
|
325
373
|
});
|
|
326
374
|
requestCount += 1;
|
|
327
375
|
hasMore = result.paging?.more ?? false;
|
|
328
|
-
|
|
376
|
+
const nextCursor = result.paging?.cursor;
|
|
377
|
+
|
|
378
|
+
// Keep this page before deciding whether to continue: the request is already paid for, so
|
|
379
|
+
// dropping its rows would lose real results to save nothing.
|
|
329
380
|
const formattedIssues = result.values
|
|
330
381
|
.map(issue => toIssueShape(issue, this))
|
|
331
382
|
.filter((result): result is IssueShape => result != null);
|
|
332
383
|
if (formattedIssues.length > 0) {
|
|
333
384
|
issues.push(...formattedIssues);
|
|
334
385
|
}
|
|
335
|
-
|
|
386
|
+
|
|
387
|
+
// The provider claims more but hands back no advancing cursor: continuing would re-read the page
|
|
388
|
+
// just returned. `ProvidersApi.getPagedResult` already normalizes this into `more: false`, so
|
|
389
|
+
// this is a backstop for if that ever stops holding rather than a case seen today -- but the rest
|
|
390
|
+
// of the account is unreachable either way, which is what `truncated` says.
|
|
391
|
+
if (hasMore && (nextCursor == null || nextCursor === cursor)) {
|
|
392
|
+
truncated = true;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
cursor = nextCursor;
|
|
397
|
+
} while (requestCount < maxAccountWidePagesPerRequest && hasMore);
|
|
398
|
+
|
|
399
|
+
// Ran out of budget with pages still to come.
|
|
400
|
+
if (hasMore && requestCount >= maxAccountWidePagesPerRequest) {
|
|
401
|
+
truncated = true;
|
|
402
|
+
}
|
|
336
403
|
} catch (ex) {
|
|
337
404
|
if (issues.length === 0) {
|
|
338
405
|
throw ex;
|
|
339
406
|
}
|
|
340
407
|
|
|
408
|
+
// Kept what was already fetched, so the list is real but short of the account.
|
|
409
|
+
truncated = true;
|
|
341
410
|
Logger.error(ex, 'searchProviderMyIssues');
|
|
342
411
|
}
|
|
343
|
-
return issues;
|
|
412
|
+
return { values: issues, truncated: truncated };
|
|
344
413
|
}
|
|
345
414
|
protected override async getProviderLinkedIssueOrPullRequest(
|
|
346
415
|
session: ProviderAuthenticationSession,
|