@gitkraken/core-gitlens 0.9.3 → 0.9.5

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 (160) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/dist/git/models/issue.d.ts +25 -2
  3. package/dist/git/models/issue.js +3 -1
  4. package/dist/git/models/issue.js.map +1 -1
  5. package/dist/git/models/pullRequest.d.ts +55 -5
  6. package/dist/git/models/pullRequest.js +5 -1
  7. package/dist/git/models/pullRequest.js.map +1 -1
  8. package/dist/git/utils/issue.utils.d.ts +4 -0
  9. package/dist/git/utils/issue.utils.js +4 -0
  10. package/dist/git/utils/issue.utils.js.map +1 -1
  11. package/dist/git/utils/pullRequest.utils.d.ts +4 -0
  12. package/dist/git/utils/pullRequest.utils.js +8 -0
  13. package/dist/git/utils/pullRequest.utils.js.map +1 -1
  14. package/dist/plus/git-github/api/github.d.ts +64 -4
  15. package/dist/plus/git-github/api/github.js +232 -15
  16. package/dist/plus/git-github/api/github.js.map +1 -1
  17. package/dist/plus/git-github/models.d.ts +48 -6
  18. package/dist/plus/git-github/models.js +11 -10
  19. package/dist/plus/git-github/models.js.map +1 -1
  20. package/dist/plus/integrations/fieldPresence.d.ts +75 -0
  21. package/dist/plus/integrations/fieldPresence.js +381 -0
  22. package/dist/plus/integrations/fieldPresence.js.map +1 -0
  23. package/dist/plus/integrations/index.d.ts +6 -4
  24. package/dist/plus/integrations/index.js +2 -1
  25. package/dist/plus/integrations/index.js.map +1 -1
  26. package/dist/plus/integrations/integrationService.d.ts +13 -4
  27. package/dist/plus/integrations/integrationService.js.map +1 -1
  28. package/dist/plus/integrations/manager.d.ts +62 -7
  29. package/dist/plus/integrations/models/gitHostIntegration.d.ts +103 -9
  30. package/dist/plus/integrations/models/gitHostIntegration.js +116 -5
  31. package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -1
  32. package/dist/plus/integrations/models/integration.d.ts +91 -4
  33. package/dist/plus/integrations/models/integration.js +56 -7
  34. package/dist/plus/integrations/models/integration.js.map +1 -1
  35. package/dist/plus/integrations/models/issueReads.d.ts +14 -0
  36. package/dist/plus/integrations/models/issuesIntegration.d.ts +44 -3
  37. package/dist/plus/integrations/models/issuesIntegration.js +51 -1
  38. package/dist/plus/integrations/models/issuesIntegration.js.map +1 -1
  39. package/dist/plus/integrations/providers/azure/azure.js +3 -3
  40. package/dist/plus/integrations/providers/azure/azure.js.map +1 -1
  41. package/dist/plus/integrations/providers/azure/models.d.ts +36 -4
  42. package/dist/plus/integrations/providers/azure/models.js +118 -8
  43. package/dist/plus/integrations/providers/azure/models.js.map +1 -1
  44. package/dist/plus/integrations/providers/azureDevOps.d.ts +102 -5
  45. package/dist/plus/integrations/providers/azureDevOps.js +264 -45
  46. package/dist/plus/integrations/providers/azureDevOps.js.map +1 -1
  47. package/dist/plus/integrations/providers/azureDevOpsServer.d.ts +30 -6
  48. package/dist/plus/integrations/providers/azureDevOpsServer.js +82 -21
  49. package/dist/plus/integrations/providers/azureDevOpsServer.js.map +1 -1
  50. package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +21 -1
  51. package/dist/plus/integrations/providers/bitbucket/bitbucket.js +74 -10
  52. package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -1
  53. package/dist/plus/integrations/providers/bitbucket/models.d.ts +45 -8
  54. package/dist/plus/integrations/providers/bitbucket/models.js +32 -9
  55. package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -1
  56. package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +2 -6
  57. package/dist/plus/integrations/providers/bitbucket-server/models.js +1 -3
  58. package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -1
  59. package/dist/plus/integrations/providers/bitbucket-server/pullRequestSearch.d.ts +3 -1
  60. package/dist/plus/integrations/providers/bitbucket-server/pullRequestSearch.js +4 -1
  61. package/dist/plus/integrations/providers/bitbucket-server/pullRequestSearch.js.map +1 -1
  62. package/dist/plus/integrations/providers/bitbucket-server.d.ts +2 -2
  63. package/dist/plus/integrations/providers/bitbucket-server.js +7 -5
  64. package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -1
  65. package/dist/plus/integrations/providers/bitbucket.d.ts +22 -2
  66. package/dist/plus/integrations/providers/bitbucket.js +29 -6
  67. package/dist/plus/integrations/providers/bitbucket.js.map +1 -1
  68. package/dist/plus/integrations/providers/github.d.ts +40 -3
  69. package/dist/plus/integrations/providers/github.js +133 -11
  70. package/dist/plus/integrations/providers/github.js.map +1 -1
  71. package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +34 -1
  72. package/dist/plus/integrations/providers/gitlab/gitlab.js +118 -4
  73. package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -1
  74. package/dist/plus/integrations/providers/gitlab/models.d.ts +70 -5
  75. package/dist/plus/integrations/providers/gitlab/models.js +106 -13
  76. package/dist/plus/integrations/providers/gitlab/models.js.map +1 -1
  77. package/dist/plus/integrations/providers/gitlab.d.ts +31 -2
  78. package/dist/plus/integrations/providers/gitlab.js +48 -8
  79. package/dist/plus/integrations/providers/gitlab.js.map +1 -1
  80. package/dist/plus/integrations/providers/jira-server.d.ts +3 -2
  81. package/dist/plus/integrations/providers/jira-server.js +18 -9
  82. package/dist/plus/integrations/providers/jira-server.js.map +1 -1
  83. package/dist/plus/integrations/providers/jira.d.ts +26 -2
  84. package/dist/plus/integrations/providers/jira.js +120 -9
  85. package/dist/plus/integrations/providers/jira.js.map +1 -1
  86. package/dist/plus/integrations/providers/jiraIssueByKey.d.ts +79 -0
  87. package/dist/plus/integrations/providers/jiraIssueByKey.js +58 -7
  88. package/dist/plus/integrations/providers/jiraIssueByKey.js.map +1 -1
  89. package/dist/plus/integrations/providers/linear.d.ts +19 -1
  90. package/dist/plus/integrations/providers/linear.js +105 -7
  91. package/dist/plus/integrations/providers/linear.js.map +1 -1
  92. package/dist/plus/integrations/providers/linearIssuesEtag.d.ts +42 -0
  93. package/dist/plus/integrations/providers/linearIssuesEtag.js +94 -0
  94. package/dist/plus/integrations/providers/linearIssuesEtag.js.map +1 -0
  95. package/dist/plus/integrations/providers/models.d.ts +70 -8
  96. package/dist/plus/integrations/providers/models.js +59 -21
  97. package/dist/plus/integrations/providers/models.js.map +1 -1
  98. package/dist/plus/integrations/providers/providerErrors.js +8 -1
  99. package/dist/plus/integrations/providers/providerErrors.js.map +1 -1
  100. package/dist/plus/integrations/providers/providersApi.d.ts +70 -4
  101. package/dist/plus/integrations/providers/providersApi.js +148 -4
  102. package/dist/plus/integrations/providers/providersApi.js.map +1 -1
  103. package/dist/plus/integrations/providers/pullRequestReviews.d.ts +13 -0
  104. package/dist/plus/integrations/providers/pullRequestReviews.js +30 -6
  105. package/dist/plus/integrations/providers/pullRequestReviews.js.map +1 -1
  106. package/dist/plus/integrations/providers/trello.js +11 -7
  107. package/dist/plus/integrations/providers/trello.js.map +1 -1
  108. package/dist/plus/integrations/providers/utils/providerPaging.d.ts +11 -0
  109. package/dist/plus/integrations/providers/utils/providerPaging.js +47 -1
  110. package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -1
  111. package/dist/plus/integrations/providers/utils.d.ts +1 -1
  112. package/dist/plus/integrations/reads/batchEtags.d.ts +69 -0
  113. package/dist/plus/integrations/reads/batchEtags.js +114 -0
  114. package/dist/plus/integrations/reads/batchEtags.js.map +1 -0
  115. package/dist/plus/integrations/reads/counts.js +2 -2
  116. package/dist/plus/integrations/reads/counts.js.map +1 -1
  117. package/dist/plus/integrations/reads/currentAccount.js +2 -2
  118. package/dist/plus/integrations/reads/currentAccount.js.map +1 -1
  119. package/dist/plus/integrations/reads/cursors.d.ts +8 -0
  120. package/dist/plus/integrations/reads/cursors.js +5 -3
  121. package/dist/plus/integrations/reads/cursors.js.map +1 -1
  122. package/dist/plus/integrations/reads/drains.d.ts +13 -4
  123. package/dist/plus/integrations/reads/drains.js +29 -5
  124. package/dist/plus/integrations/reads/drains.js.map +1 -1
  125. package/dist/plus/integrations/reads/etag.d.ts +26 -0
  126. package/dist/plus/integrations/reads/etag.js +108 -0
  127. package/dist/plus/integrations/reads/etag.js.map +1 -0
  128. package/dist/plus/integrations/reads/filters.d.ts +8 -0
  129. package/dist/plus/integrations/reads/filters.js +2 -1
  130. package/dist/plus/integrations/reads/filters.js.map +1 -1
  131. package/dist/plus/integrations/reads/hierarchy.js +3 -3
  132. package/dist/plus/integrations/reads/hierarchy.js.map +1 -1
  133. package/dist/plus/integrations/reads/issueBatch.d.ts +47 -16
  134. package/dist/plus/integrations/reads/issueBatch.js +55 -87
  135. package/dist/plus/integrations/reads/issueBatch.js.map +1 -1
  136. package/dist/plus/integrations/reads/issueTracker.d.ts +10 -2
  137. package/dist/plus/integrations/reads/issueTracker.js +23 -6
  138. package/dist/plus/integrations/reads/issueTracker.js.map +1 -1
  139. package/dist/plus/integrations/reads/issues.d.ts +1 -1
  140. package/dist/plus/integrations/reads/issues.js +4 -4
  141. package/dist/plus/integrations/reads/issues.js.map +1 -1
  142. package/dist/plus/integrations/reads/pullRequestBatch.d.ts +44 -6
  143. package/dist/plus/integrations/reads/pullRequestBatch.js +31 -34
  144. package/dist/plus/integrations/reads/pullRequestBatch.js.map +1 -1
  145. package/dist/plus/integrations/reads/pullRequestBranches.d.ts +5 -2
  146. package/dist/plus/integrations/reads/pullRequestBranches.js +4 -3
  147. package/dist/plus/integrations/reads/pullRequestBranches.js.map +1 -1
  148. package/dist/plus/integrations/reads/pullRequests.js +8 -4
  149. package/dist/plus/integrations/reads/pullRequests.js.map +1 -1
  150. package/dist/plus/integrations/reads/sweeps.js +8 -4
  151. package/dist/plus/integrations/reads/sweeps.js.map +1 -1
  152. package/dist/plus/integrations/reads/warnings.d.ts +23 -8
  153. package/dist/plus/integrations/reads/warnings.js +43 -19
  154. package/dist/plus/integrations/reads/warnings.js.map +1 -1
  155. package/dist/plus/integrations/results.d.ts +12 -4
  156. package/dist/plus/integrations/results.js +2 -0
  157. package/dist/plus/integrations/results.js.map +1 -1
  158. package/docs/integrations.md +389 -23
  159. package/docs/kepler-read-api-parity.md +16 -2
  160. package/package.json +2 -2
@@ -1,8 +1,8 @@
1
1
  import { GitFileIndexStatus } from "../../git/models/fileStatus.js";
2
2
  import { Provider } from "../../git/models/remoteProvider.js";
3
3
  import { IssueOrPullRequestState } from "../../git/models/issueOrPullRequest.js";
4
- import { Issue, IssueLabel } from "../../git/models/issue.js";
5
- import { PullRequest, PullRequestMergeableState, PullRequestReviewDecision, PullRequestReviewState, PullRequestStatusCheckRollupState } from "../../git/models/pullRequest.js";
4
+ import { Issue, IssueLabel, IssueProjection } from "../../git/models/issue.js";
5
+ import { PullRequest, PullRequestMergeableState, PullRequestProjection, PullRequestReviewDecision, PullRequestReviewState, PullRequestStatusCheckRollupState } from "../../git/models/pullRequest.js";
6
6
  import { Endpoints } from "@octokit/types";
7
7
  //#region ../plus/git-github/src/models.d.ts
8
8
  export interface GitHubBlame {
@@ -207,7 +207,8 @@ export interface GitHubPullRequest extends GitHubPullRequestLite {
207
207
  reviewRequests: {
208
208
  nodes: {
209
209
  asCodeOwner: boolean;
210
- requestedReviewer: GitHubMember | null;
210
+ /** Empty for a team (or anything else that isn't a user), which the `... on User` selection doesn't match. */
211
+ requestedReviewer: Partial<GitHubMember> | null;
211
212
  }[];
212
213
  };
213
214
  commits: {
@@ -223,8 +224,49 @@ export interface GitHubPullRequest extends GitHubPullRequestLite {
223
224
  totalCommentsCount: number;
224
225
  viewerCanUpdate: boolean;
225
226
  }
227
+ /**
228
+ * An input beyond a pull request's lifecycle fields that `GitHubApi.getPullRequestsEtagFieldsBatch` can select.
229
+ * Mirrors the integrations package's `PullRequestEtagInclude`, which this package cannot import.
230
+ */
231
+ export type GitHubPullRequestEtagInclude = 'mergeable' | 'reviewDecision' | 'checks';
232
+ /**
233
+ * The change state `GitHubApi.getPullRequestsEtagFieldsBatch` selects: a pull request's lifecycle fields, plus,
234
+ * for each requested {@link GitHubPullRequestEtagInclude}, what its etag reads. Each selection is the full
235
+ * fragment's own, so a value here is the one a full read would have mapped.
236
+ */
237
+ export interface GitHubPullRequestEtagNode extends Pick<GitHubPullRequest, 'id' | 'number' | 'state' | 'isDraft' | 'updatedAt' | 'headRefOid'> {
238
+ /** Only with `mergeable`. */
239
+ mergeable?: GitHubPullRequestMergeableState | null;
240
+ /** Only with `reviewDecision`. `null` on a repository that requires no review. */
241
+ reviewDecision?: GitHubPullRequestReviewDecision | null;
242
+ /** Only with `checks`. */
243
+ commits?: {
244
+ nodes: {
245
+ commit: {
246
+ statusCheckRollup: {
247
+ state: GitHubPullRequestStatusCheckRollupState;
248
+ } | null;
249
+ };
250
+ }[];
251
+ };
252
+ }
253
+ /**
254
+ * An input beyond an issue's lifecycle fields that `GitHubApi.getIssuesEtagFieldsBatch` can select. Mirrors the
255
+ * integrations package's `IssueEtagInclude`, which this package cannot import.
256
+ */
257
+ export type GitHubIssueEtagInclude = 'reactions';
258
+ /**
259
+ * The change state `GitHubApi.getIssuesEtagFieldsBatch` selects, plus, for each requested
260
+ * {@link GitHubIssueEtagInclude}, the full fragment's own selection of it.
261
+ */
262
+ export interface GitHubIssueEtagNode extends Pick<GitHubIssue, 'id' | 'number' | 'state' | 'updatedAt'> {
263
+ /** Only with `reactions`: the thumbs-up reactions, as the full fragment selects them. */
264
+ reactions?: {
265
+ totalCount: number;
266
+ };
267
+ }
226
268
  export type GitHubViewerPermission = 'ADMIN' | 'MAINTAIN' | 'WRITE' | 'TRIAGE' | 'READ' | 'NONE';
227
- export declare function fromGitHubPullRequestLite(pr: GitHubPullRequestLite, provider: Provider): PullRequest;
269
+ export declare function fromGitHubPullRequestLite(pr: GitHubPullRequestLite, provider: Provider, projection?: PullRequestProjection): PullRequest;
228
270
  export declare function fromGitHubIssueOrPullRequestState(state: GitHubPullRequestState): IssueOrPullRequestState;
229
271
  export declare function toGitHubPullRequestState(state: IssueOrPullRequestState): GitHubPullRequestState;
230
272
  export declare function fromGitHubPullRequestReviewDecision(reviewDecision: GitHubPullRequestReviewDecision): PullRequestReviewDecision;
@@ -233,7 +275,7 @@ export declare function toGitHubPullRequestReviewDecision(reviewDecision: PullRe
233
275
  export declare function fromGitHubPullRequestMergeableState(mergeableState: GitHubPullRequestMergeableState): PullRequestMergeableState;
234
276
  export declare function toGitHubPullRequestMergeableState(mergeableState: PullRequestMergeableState): GitHubPullRequestMergeableState;
235
277
  export declare function fromGitHubPullRequestStatusCheckRollupState(state: GitHubPullRequestStatusCheckRollupState | null | undefined): PullRequestStatusCheckRollupState | undefined;
236
- export declare function fromGitHubPullRequest(pr: GitHubPullRequest, provider: Provider): PullRequest;
237
- export declare function fromGitHubIssue(value: GitHubIssue, provider: Provider): Issue;
278
+ export declare function fromGitHubPullRequest(pr: GitHubPullRequest, provider: Provider, projection?: PullRequestProjection): PullRequest;
279
+ export declare function fromGitHubIssue(value: GitHubIssue, provider: Provider, projection?: IssueProjection): Issue;
238
280
  //#endregion
239
281
  //# sourceMappingURL=models.d.ts.map
@@ -12,11 +12,12 @@ function fromCommitFileStatus(status) {
12
12
  case "copied": return GitFileIndexStatus.Copied;
13
13
  }
14
14
  }
15
- /** `ghost` is how github.com renders an actor whose account was deleted */
15
+ /** `ghost` is how github.com renders an actor whose account was deleted, under the handle `ghost` */
16
16
  function fromGitHubMemberOrGhost(member) {
17
17
  if (member == null) return {
18
18
  id: "ghost",
19
- name: "ghost"
19
+ name: "ghost",
20
+ username: "ghost"
20
21
  };
21
22
  return {
22
23
  id: member.login,
@@ -26,7 +27,7 @@ function fromGitHubMemberOrGhost(member) {
26
27
  url: member.url
27
28
  };
28
29
  }
29
- function fromGitHubPullRequestLite(pr, provider) {
30
+ function fromGitHubPullRequestLite(pr, provider, projection) {
30
31
  return new PullRequest(provider, fromGitHubMemberOrGhost(pr.author), String(pr.number), pr.id, pr.title, pr.permalink, {
31
32
  owner: pr.repository.owner.login,
32
33
  repo: pr.repository.name,
@@ -55,7 +56,7 @@ function fromGitHubPullRequestLite(pr, provider) {
55
56
  isFork: pr.repository?.isFork
56
57
  },
57
58
  isCrossRepository: pr.isCrossRepository
58
- }, pr.isDraft, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, fromGitHubPullRequestStack(pr), void 0, pr.body ?? void 0);
59
+ }, pr.isDraft, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, fromGitHubPullRequestStack(pr), void 0, pr.body ?? void 0, pr.number, void 0, projection);
59
60
  }
60
61
  /** Both fields are absent on GitHub Enterprise Server (never selected) and `null` when unstacked. */
61
62
  function fromGitHubPullRequestStack(pr) {
@@ -123,7 +124,7 @@ function fromGitHubPullRequestStatusCheckRollupState(state) {
123
124
  default: return;
124
125
  }
125
126
  }
126
- function fromGitHubPullRequest(pr, provider) {
127
+ function fromGitHubPullRequest(pr, provider, projection) {
127
128
  const viewerLatestReview = pr.viewerLatestReview;
128
129
  const latestReviews = [...pr.latestReviews.nodes, ...viewerLatestReview != null && !pr.latestReviews.nodes.some((r) => r.id === viewerLatestReview.id) ? [viewerLatestReview] : []].filter((review) => review.state !== "PENDING");
129
130
  return new PullRequest(provider, fromGitHubMemberOrGhost(pr.author), String(pr.number), pr.id, pr.title, pr.permalink, {
@@ -154,10 +155,10 @@ function fromGitHubPullRequest(pr, provider) {
154
155
  isFork: pr.repository?.isFork
155
156
  },
156
157
  isCrossRepository: pr.isCrossRepository
157
- }, pr.isDraft, pr.additions, pr.deletions, pr.totalCommentsCount, 0, fromGitHubPullRequestReviewDecision(pr.reviewDecision), pr.reviewRequests.nodes.map((r) => r.requestedReviewer != null ? {
158
+ }, pr.isDraft, pr.additions, pr.deletions, pr.totalCommentsCount, void 0, fromGitHubPullRequestReviewDecision(pr.reviewDecision), pr.reviewRequests.nodes.map((r) => r.requestedReviewer != null ? {
158
159
  isCodeOwner: r.asCodeOwner,
159
160
  reviewer: {
160
- id: r.requestedReviewer.login,
161
+ id: r.requestedReviewer.login ?? "",
161
162
  name: r.requestedReviewer.login,
162
163
  username: r.requestedReviewer.login,
163
164
  avatarUrl: r.requestedReviewer.avatarUrl,
@@ -174,9 +175,9 @@ function fromGitHubPullRequest(pr, provider) {
174
175
  username: r.login,
175
176
  avatarUrl: r.avatarUrl,
176
177
  url: r.url
177
- })), fromGitHubPullRequestStatusCheckRollupState(pr.commits.nodes?.[0]?.commit.statusCheckRollup?.state), void 0, void 0, pr.commits.totalCount, fromGitHubPullRequestStack(pr), pr.changedFiles, pr.body ?? void 0);
178
+ })), fromGitHubPullRequestStatusCheckRollupState(pr.commits.nodes?.[0]?.commit.statusCheckRollup?.state), void 0, void 0, pr.commits.totalCount, fromGitHubPullRequestStack(pr), pr.changedFiles, pr.body ?? void 0, pr.number, void 0, projection);
178
179
  }
179
- function fromGitHubIssue(value, provider) {
180
+ function fromGitHubIssue(value, provider, projection) {
180
181
  return new Issue({
181
182
  id: provider.id,
182
183
  name: provider.name,
@@ -202,7 +203,7 @@ function fromGitHubIssue(value, provider) {
202
203
  }, value.closedAt == null ? void 0 : new Date(value.closedAt), value.labels?.nodes == null ? void 0 : value.labels.nodes.map((label) => ({
203
204
  color: label.color,
204
205
  name: label.name
205
- })), value.comments?.totalCount, value.reactions?.totalCount, value.body);
206
+ })), value.comments?.totalCount, value.reactions?.totalCount, value.body, void 0, void 0, void 0, void 0, void 0, void 0, projection);
206
207
  }
207
208
  function fromGitHubViewerPermissionToAccessLevel(permission) {
208
209
  switch (permission) {
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","names":[],"sources":["../../../../plus/git-github/src/models.ts"],"sourcesContent":["import type { Endpoints } from '@octokit/types';\nimport { GitFileIndexStatus } from '@gitlens/git/models/fileStatus.js';\nimport type { IssueLabel } from '@gitlens/git/models/issue.js';\nimport { Issue, RepositoryAccessLevel } from '@gitlens/git/models/issue.js';\nimport type { PullRequestMember, PullRequestStackInfo, PullRequestState } from '@gitlens/git/models/pullRequest.js';\nimport {\n\tPullRequest,\n\tPullRequestMergeableState,\n\tPullRequestReviewDecision,\n\tPullRequestReviewState,\n\tPullRequestStatusCheckRollupState,\n} from '@gitlens/git/models/pullRequest.js';\nimport type { Provider } from '@gitlens/git/models/remoteProvider.js';\n\nexport interface GitHubBlame {\n\tranges: GitHubBlameRange[];\n\tviewer?: string;\n}\n\nexport interface GitHubBlameRange {\n\tstartingLine: number;\n\tendingLine: number;\n\tcommit: GitHubCommit;\n}\n\nexport interface GitHubBranch {\n\tname: string;\n\ttarget: {\n\t\toid: string;\n\t\tauthoredDate: string;\n\t\tcommittedDate: string;\n\t};\n}\n\nexport interface GitHubCommit {\n\toid: string;\n\tparents: { nodes: { oid: string }[] };\n\tmessage: string;\n\tadditions?: number | undefined;\n\tchangedFiles?: number | undefined;\n\tdeletions?: number | undefined;\n\tauthor: { avatarUrl: string | undefined; date: string; email: string | undefined; name: string };\n\tcommitter: { date: string; email: string | undefined; name: string };\n\n\tfiles?: Endpoints['GET /repos/{owner}/{repo}/commits/{ref}']['response']['data']['files'];\n}\n\nexport interface GitHubCommitRef {\n\toid: string;\n}\n\nexport type GitHubContributor = Endpoints['GET /repos/{owner}/{repo}/contributors']['response']['data'][0];\n\nexport type GitHubSshSigningKey = Endpoints['GET /users/{username}/ssh_signing_keys']['response']['data'][0];\n\nexport interface GitHubMember {\n\tlogin: string;\n\tavatarUrl: string;\n\turl: string;\n}\n\nexport interface GitHubPagedResult<T> {\n\tpageInfo: GitHubPageInfo;\n\ttotalCount: number;\n\tvalues: T[];\n}\nexport interface GitHubPageInfo {\n\tstartCursor?: string | null;\n\tendCursor?: string | null;\n\thasNextPage: boolean;\n\thasPreviousPage: boolean;\n}\n\nexport interface GitHubTag {\n\tname: string;\n\ttarget: {\n\t\toid: string;\n\t\tauthoredDate?: string;\n\t\tcommittedDate?: string;\n\t\tmessage?: string | null;\n\t\ttagger?: {\n\t\t\tdate: string;\n\t\t} | null;\n\n\t\ttarget?: {\n\t\t\toid?: string;\n\t\t\tauthoredDate?: string;\n\t\t\tcommittedDate?: string;\n\t\t\tmessage?: string | null;\n\t\t};\n\t};\n}\n\nexport type GitHubCommitFileStatus = NonNullable<\n\tEndpoints['GET /repos/{owner}/{repo}/commits/{ref}']['response']['data']['files']\n>[0]['status'];\n\nexport function fromCommitFileStatus(status: GitHubCommitFileStatus): GitFileIndexStatus | undefined {\n\tswitch (status) {\n\t\tcase 'added':\n\t\t\treturn GitFileIndexStatus.Added;\n\t\tcase 'changed':\n\t\tcase 'modified':\n\t\t\treturn GitFileIndexStatus.Modified;\n\t\tcase 'removed':\n\t\t\treturn GitFileIndexStatus.Deleted;\n\t\tcase 'renamed':\n\t\t\treturn GitFileIndexStatus.Renamed;\n\t\tcase 'copied':\n\t\t\treturn GitFileIndexStatus.Copied;\n\t}\n\treturn undefined;\n}\n\nexport interface GitHubIssueOrPullRequest {\n\t__typename: 'Issue' | 'PullRequest';\n\n\tclosed: boolean;\n\tclosedAt: string | null;\n\tcreatedAt: string;\n\tid: string;\n\tnumber: number;\n\tstate: GitHubIssueOrPullRequestState;\n\ttitle: string;\n\tupdatedAt: string;\n\turl: string;\n}\n\nexport type GitHubIssueState = 'OPEN' | 'CLOSED';\nexport type GitHubPullRequestState = 'OPEN' | 'CLOSED' | 'MERGED';\nexport type GitHubIssueOrPullRequestState = GitHubIssueState | GitHubPullRequestState;\n\nexport interface GitHubPullRequestLite extends Omit<GitHubIssueOrPullRequest, '__typename'> {\n\t/** `Actor` is nullable in GitHub's schema — `null` once the author's account is deleted */\n\tauthor: GitHubMember | null;\n\tbody: string | null;\n\n\tbaseRefName: string;\n\tbaseRefOid: string;\n\n\theadRefName: string;\n\theadRefOid: string;\n\theadRepository: {\n\t\tisFork: boolean;\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tsshUrl: string;\n\t\turl: string;\n\t};\n\n\tisCrossRepository: boolean;\n\tisDraft: boolean;\n\tmergedAt: string | null;\n\tpermalink: string;\n\n\trepository: {\n\t\tisFork: boolean;\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tsshUrl: string;\n\t\turl: string;\n\t\tviewerPermission: GitHubViewerPermission;\n\t};\n\n\t/** Only selected against github.com — GitHub Enterprise Server schemas lag and reject the field. */\n\tstack?: GitHubPullRequestStack | null;\n\t/** Only selected against github.com — see `stack`. */\n\tstackEntry?: { position: number } | null;\n}\n\n/** GitHub's stacked-pull-request object. Read-only; all stack mutations are REST-only. */\nexport interface GitHubPullRequestStack {\n\tid: string;\n\tnumber: number;\n\tsize: number;\n\t/** The branch the bottom of the stack targets — the stack's trunk. */\n\tbaseRefName: string;\n}\n\nexport interface GitHubIssue extends Omit<GitHubIssueOrPullRequest, '__typename'> {\n\t/** `Actor` is nullable in GitHub's schema — `null` once the author's account is deleted */\n\tauthor: GitHubMember | null;\n\tassignees: { nodes: GitHubMember[] };\n\tcomments?: {\n\t\ttotalCount: number;\n\t};\n\tlabels?: { nodes: IssueLabel[] };\n\treactions?: {\n\t\ttotalCount: number;\n\t};\n\trepository: {\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tviewerPermission: GitHubViewerPermission;\n\t\turl: string;\n\t};\n\tbody: string;\n}\n\nexport type GitHubPullRequestReviewDecision = 'CHANGES_REQUESTED' | 'APPROVED' | 'REVIEW_REQUIRED';\nexport type GitHubPullRequestMergeableState = 'MERGEABLE' | 'CONFLICTING' | 'UNKNOWN';\nexport type GitHubPullRequestStatusCheckRollupState = 'SUCCESS' | 'FAILURE' | 'PENDING' | 'EXPECTED' | 'ERROR';\nexport type GitHubPullRequestReviewState = 'APPROVED' | 'CHANGES_REQUESTED' | 'COMMENTED' | 'DISMISSED' | 'PENDING';\n\ntype GitHubPullRequestReview = {\n\tid: string;\n\tauthor: GitHubMember | null;\n\tstate: GitHubPullRequestReviewState;\n\tcommit?: { oid: string } | null;\n};\n\nexport interface GitHubPullRequest extends GitHubPullRequestLite {\n\tadditions: number;\n\tassignees: {\n\t\tnodes: GitHubMember[];\n\t};\n\tchangedFiles: number;\n\tchecksUrl: string;\n\tdeletions: number;\n\tmergeable: GitHubPullRequestMergeableState;\n\treviewDecision: GitHubPullRequestReviewDecision;\n\tlatestReviews: {\n\t\tnodes: GitHubPullRequestReview[];\n\t};\n\t/**\n\t * The current user's own latest review. `latestReviews` is capped, so on a heavily-reviewed pull request\n\t * the viewer's own review can fall outside that window — which is exactly the row a \"needs my review\"\n\t * surface is asking about.\n\t */\n\tviewerLatestReview: GitHubPullRequestReview | null;\n\treviewRequests: {\n\t\tnodes: {\n\t\t\tasCodeOwner: boolean;\n\t\t\trequestedReviewer: GitHubMember | null;\n\t\t}[];\n\t};\n\tcommits: {\n\t\ttotalCount: number;\n\t\tnodes: {\n\t\t\tcommit: {\n\t\t\t\tstatusCheckRollup: {\n\t\t\t\t\tstate: 'SUCCESS' | 'FAILURE' | 'PENDING' | 'EXPECTED' | 'ERROR';\n\t\t\t\t} | null;\n\t\t\t};\n\t\t}[];\n\t};\n\ttotalCommentsCount: number;\n\tviewerCanUpdate: boolean;\n}\n\nexport type GitHubViewerPermission =\n\t| 'ADMIN' // Can read, clone, and push to this repository. Can also manage issues, pull requests, and repository settings, including adding collaborators\n\t| 'MAINTAIN' // Can read, clone, and push to this repository. They can also manage issues, pull requests, and some repository settings\n\t| 'WRITE' // Can read, clone, and push to this repository. Can also manage issues and pull requests\n\t| 'TRIAGE' // Can read and clone this repository. Can also manage issues and pull requests\n\t| 'READ' // Can read and clone this repository. Can also open and comment on issues and pull requests\n\t| 'NONE';\n\n/** `ghost` is how github.com renders an actor whose account was deleted */\nfunction fromGitHubMemberOrGhost(member: GitHubMember | null | undefined): PullRequestMember {\n\tif (member == null) return { id: 'ghost', name: 'ghost' };\n\n\treturn {\n\t\tid: member.login,\n\t\tname: member.login,\n\t\tusername: member.login,\n\t\tavatarUrl: member.avatarUrl,\n\t\turl: member.url,\n\t};\n}\n\nexport function fromGitHubPullRequestLite(pr: GitHubPullRequestLite, provider: Provider): PullRequest {\n\treturn new PullRequest(\n\t\tprovider,\n\t\tfromGitHubMemberOrGhost(pr.author),\n\t\tString(pr.number),\n\t\tpr.id,\n\t\tpr.title,\n\t\tpr.permalink,\n\t\t{\n\t\t\towner: pr.repository.owner.login,\n\t\t\trepo: pr.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(pr.repository.viewerPermission),\n\t\t},\n\t\tfromGitHubIssueOrPullRequestState(pr.state),\n\t\tnew Date(pr.createdAt),\n\t\tnew Date(pr.updatedAt),\n\t\tpr.closedAt == null ? undefined : new Date(pr.closedAt),\n\t\tpr.mergedAt == null ? undefined : new Date(pr.mergedAt),\n\t\tundefined,\n\t\tundefined,\n\t\t{\n\t\t\thead: {\n\t\t\t\texists: pr.headRepository != null,\n\t\t\t\towner: pr.headRepository?.owner.login,\n\t\t\t\trepo: pr.headRepository?.name,\n\t\t\t\tsha: pr.headRefOid,\n\t\t\t\tbranch: pr.headRefName,\n\t\t\t\turl: pr.headRepository?.url,\n\t\t\t\tcloneHttps: pr.headRepository != null ? `${pr.headRepository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.headRepository?.sshUrl,\n\t\t\t\tisFork: pr.headRepository?.isFork,\n\t\t\t},\n\t\t\tbase: {\n\t\t\t\texists: pr.repository != null,\n\t\t\t\towner: pr.repository?.owner.login,\n\t\t\t\trepo: pr.repository?.name,\n\t\t\t\tsha: pr.baseRefOid,\n\t\t\t\tbranch: pr.baseRefName,\n\t\t\t\turl: pr.repository?.url,\n\t\t\t\tcloneHttps: pr.repository != null ? `${pr.repository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.repository?.sshUrl,\n\t\t\t\tisFork: pr.repository?.isFork,\n\t\t\t},\n\t\t\tisCrossRepository: pr.isCrossRepository,\n\t\t},\n\t\tpr.isDraft,\n\t\t// The lite fragment selects nothing between `isDraft` and `stack`.\n\t\tundefined, // additions\n\t\tundefined, // deletions\n\t\tundefined, // commentsCount\n\t\tundefined, // thumbsUpCount\n\t\tundefined, // reviewDecision\n\t\tundefined, // reviewRequests\n\t\tundefined, // latestReviews\n\t\tundefined, // assignees\n\t\tundefined, // statusCheckRollupState\n\t\tundefined, // project\n\t\tundefined, // version\n\t\tundefined, // commitCount\n\t\tfromGitHubPullRequestStack(pr),\n\t\tundefined, // filesChanged\n\t\tpr.body ?? undefined,\n\t);\n}\n\n/** Both fields are absent on GitHub Enterprise Server (never selected) and `null` when unstacked. */\nfunction fromGitHubPullRequestStack(pr: GitHubPullRequestLite): PullRequestStackInfo | undefined {\n\tif (pr.stack == null || pr.stackEntry == null) return undefined;\n\n\treturn {\n\t\tid: pr.stack.id,\n\t\tnumber: pr.stack.number,\n\t\tsize: pr.stack.size,\n\t\tposition: pr.stackEntry.position,\n\t\tbaseRef: pr.stack.baseRefName,\n\t};\n}\n\nexport function fromGitHubIssueOrPullRequestState(state: GitHubPullRequestState): PullRequestState {\n\treturn state === 'MERGED' ? 'merged' : state === 'CLOSED' ? 'closed' : 'opened';\n}\n\nexport function toGitHubPullRequestState(state: PullRequestState): GitHubPullRequestState {\n\treturn state === 'merged' ? 'MERGED' : state === 'closed' ? 'CLOSED' : 'OPEN';\n}\n\nexport function fromGitHubPullRequestReviewDecision(\n\treviewDecision: GitHubPullRequestReviewDecision,\n): PullRequestReviewDecision {\n\tswitch (reviewDecision) {\n\t\tcase 'APPROVED':\n\t\t\treturn PullRequestReviewDecision.Approved;\n\t\tcase 'CHANGES_REQUESTED':\n\t\t\treturn PullRequestReviewDecision.ChangesRequested;\n\t\tcase 'REVIEW_REQUIRED':\n\t\t\treturn PullRequestReviewDecision.ReviewRequired;\n\t}\n}\n\nexport function fromGitHubPullRequestReviewState(state: GitHubPullRequestReviewState): PullRequestReviewState {\n\tswitch (state) {\n\t\tcase 'APPROVED':\n\t\t\treturn PullRequestReviewState.Approved;\n\t\tcase 'CHANGES_REQUESTED':\n\t\t\treturn PullRequestReviewState.ChangesRequested;\n\t\tcase 'COMMENTED':\n\t\t\treturn PullRequestReviewState.Commented;\n\t\tcase 'DISMISSED':\n\t\t\treturn PullRequestReviewState.Dismissed;\n\t\tcase 'PENDING':\n\t\t\treturn PullRequestReviewState.Pending;\n\t}\n}\n\nexport function toGitHubPullRequestReviewDecision(\n\treviewDecision: PullRequestReviewDecision,\n): GitHubPullRequestReviewDecision {\n\tswitch (reviewDecision) {\n\t\tcase PullRequestReviewDecision.Approved:\n\t\t\treturn 'APPROVED';\n\t\tcase PullRequestReviewDecision.ChangesRequested:\n\t\t\treturn 'CHANGES_REQUESTED';\n\t\tcase PullRequestReviewDecision.ReviewRequired:\n\t\t\treturn 'REVIEW_REQUIRED';\n\t}\n}\n\nexport function fromGitHubPullRequestMergeableState(\n\tmergeableState: GitHubPullRequestMergeableState,\n): PullRequestMergeableState {\n\tswitch (mergeableState) {\n\t\tcase 'MERGEABLE':\n\t\t\treturn PullRequestMergeableState.Mergeable;\n\t\tcase 'CONFLICTING':\n\t\t\treturn PullRequestMergeableState.Conflicting;\n\t\tcase 'UNKNOWN':\n\t\t\treturn PullRequestMergeableState.Unknown;\n\t}\n}\n\nexport function toGitHubPullRequestMergeableState(\n\tmergeableState: PullRequestMergeableState,\n): GitHubPullRequestMergeableState {\n\tswitch (mergeableState) {\n\t\tcase PullRequestMergeableState.Mergeable:\n\t\t\treturn 'MERGEABLE';\n\t\tcase PullRequestMergeableState.Conflicting:\n\t\t\treturn 'CONFLICTING';\n\t\tcase PullRequestMergeableState.FailingChecks:\n\t\t\treturn 'UNKNOWN';\n\t\tcase PullRequestMergeableState.BlockedByPolicy:\n\t\t\treturn 'UNKNOWN';\n\t\tcase PullRequestMergeableState.Unknown:\n\t\t\treturn 'UNKNOWN';\n\t}\n}\n\nexport function fromGitHubPullRequestStatusCheckRollupState(\n\tstate: GitHubPullRequestStatusCheckRollupState | null | undefined,\n): PullRequestStatusCheckRollupState | undefined {\n\tswitch (state) {\n\t\tcase 'SUCCESS':\n\t\tcase 'EXPECTED':\n\t\t\treturn PullRequestStatusCheckRollupState.Success;\n\t\tcase 'FAILURE':\n\t\tcase 'ERROR':\n\t\t\treturn PullRequestStatusCheckRollupState.Failed;\n\t\tcase 'PENDING':\n\t\t\treturn PullRequestStatusCheckRollupState.Pending;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function fromGitHubPullRequest(pr: GitHubPullRequest, provider: Provider): PullRequest {\n\t// `latestReviews` is capped, so keep the viewer's own review even when it falls outside that window, deduped\n\t// by review id since the two selections overlap. Unsubmitted drafts are dropped from the union rather than\n\t// from the viewer's side alone: `PENDING` is in GitHub's review-state enum on both selections, and the field\n\t// this feeds is documented as reviews already SUBMITTED — a draft there tells a \"needs my review\" consumer\n\t// the review is done, and a reviewer with a submitted review plus a draft would get two conflicting rows.\n\tconst viewerLatestReview = pr.viewerLatestReview;\n\tconst latestReviews = [\n\t\t...pr.latestReviews.nodes,\n\t\t...(viewerLatestReview != null && !pr.latestReviews.nodes.some(r => r.id === viewerLatestReview.id)\n\t\t\t? [viewerLatestReview]\n\t\t\t: []),\n\t].filter(review => review.state !== 'PENDING');\n\n\treturn new PullRequest(\n\t\tprovider,\n\t\tfromGitHubMemberOrGhost(pr.author),\n\t\tString(pr.number),\n\t\tpr.id,\n\t\tpr.title,\n\t\tpr.permalink,\n\t\t{\n\t\t\towner: pr.repository.owner.login,\n\t\t\trepo: pr.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(pr.repository.viewerPermission),\n\t\t},\n\t\tfromGitHubIssueOrPullRequestState(pr.state),\n\t\tnew Date(pr.createdAt),\n\t\tnew Date(pr.updatedAt),\n\t\tpr.closedAt == null ? undefined : new Date(pr.closedAt),\n\t\tpr.mergedAt == null ? undefined : new Date(pr.mergedAt),\n\t\tfromGitHubPullRequestMergeableState(pr.mergeable),\n\t\tpr.viewerCanUpdate,\n\t\t{\n\t\t\thead: {\n\t\t\t\texists: pr.headRepository != null,\n\t\t\t\towner: pr.headRepository?.owner.login,\n\t\t\t\trepo: pr.headRepository?.name,\n\t\t\t\tsha: pr.headRefOid,\n\t\t\t\tbranch: pr.headRefName,\n\t\t\t\turl: pr.headRepository?.url,\n\t\t\t\tcloneHttps: pr.headRepository != null ? `${pr.headRepository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.headRepository?.sshUrl,\n\t\t\t\tisFork: pr.headRepository?.isFork,\n\t\t\t},\n\t\t\tbase: {\n\t\t\t\texists: pr.repository != null,\n\t\t\t\towner: pr.repository?.owner.login,\n\t\t\t\trepo: pr.repository?.name,\n\t\t\t\tsha: pr.baseRefOid,\n\t\t\t\tbranch: pr.baseRefName,\n\t\t\t\turl: pr.repository?.url,\n\t\t\t\tcloneHttps: pr.repository != null ? `${pr.repository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.repository?.sshUrl,\n\t\t\t\tisFork: pr.repository?.isFork,\n\t\t\t},\n\t\t\tisCrossRepository: pr.isCrossRepository,\n\t\t},\n\t\tpr.isDraft,\n\t\tpr.additions,\n\t\tpr.deletions,\n\t\tpr.totalCommentsCount,\n\t\t0, //pr.reactions.totalCount,\n\t\tfromGitHubPullRequestReviewDecision(pr.reviewDecision),\n\t\tpr.reviewRequests.nodes\n\t\t\t.map(r =>\n\t\t\t\tr.requestedReviewer != null\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tisCodeOwner: r.asCodeOwner,\n\t\t\t\t\t\t\treviewer: {\n\t\t\t\t\t\t\t\tid: r.requestedReviewer.login,\n\t\t\t\t\t\t\t\tname: r.requestedReviewer.login,\n\t\t\t\t\t\t\t\tusername: r.requestedReviewer.login,\n\t\t\t\t\t\t\t\tavatarUrl: r.requestedReviewer.avatarUrl,\n\t\t\t\t\t\t\t\turl: r.requestedReviewer.url,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstate: PullRequestReviewState.ReviewRequested,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t)\n\t\t\t.filter(<T>(r?: T): r is T => Boolean(r)),\n\t\tlatestReviews.map(r => ({\n\t\t\treviewer: fromGitHubMemberOrGhost(r.author),\n\t\t\tstate: fromGitHubPullRequestReviewState(r.state),\n\t\t\tcommitOid: r.commit?.oid,\n\t\t})),\n\t\tpr.assignees.nodes.map(r => ({\n\t\t\tid: r.login,\n\t\t\tname: r.login,\n\t\t\tusername: r.login,\n\t\t\tavatarUrl: r.avatarUrl,\n\t\t\turl: r.url,\n\t\t})),\n\t\tfromGitHubPullRequestStatusCheckRollupState(pr.commits.nodes?.[0]?.commit.statusCheckRollup?.state),\n\t\tundefined, // project\n\t\tundefined, // version\n\t\tpr.commits.totalCount,\n\t\tfromGitHubPullRequestStack(pr),\n\t\tpr.changedFiles,\n\t\tpr.body ?? undefined,\n\t);\n}\n\nexport function fromGitHubIssue(value: GitHubIssue, provider: Provider): Issue {\n\treturn new Issue(\n\t\t{\n\t\t\tid: provider.id,\n\t\t\tname: provider.name,\n\t\t\tdomain: provider.domain,\n\t\t\ticon: provider.icon,\n\t\t},\n\t\tString(value.number),\n\t\tvalue.id,\n\t\tvalue.title,\n\t\tvalue.url,\n\t\tnew Date(value.createdAt),\n\t\tnew Date(value.updatedAt),\n\t\tvalue.closed,\n\t\tfromGitHubIssueOrPullRequestState(value.state),\n\t\tvalue.author == null\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tid: value.author.login,\n\t\t\t\t\tname: value.author.login,\n\t\t\t\t\tusername: value.author.login,\n\t\t\t\t\tavatarUrl: value.author.avatarUrl,\n\t\t\t\t\turl: value.author.url,\n\t\t\t\t},\n\t\tvalue.assignees.nodes.map(assignee => ({\n\t\t\tid: assignee.login,\n\t\t\tname: assignee.login,\n\t\t\tusername: assignee.login,\n\t\t\tavatarUrl: assignee.avatarUrl,\n\t\t\turl: assignee.url,\n\t\t})),\n\t\t{\n\t\t\towner: value.repository.owner.login,\n\t\t\trepo: value.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(value.repository.viewerPermission),\n\t\t\turl: value.repository.url,\n\t\t},\n\t\tvalue.closedAt == null ? undefined : new Date(value.closedAt),\n\t\tvalue.labels?.nodes == null\n\t\t\t? undefined\n\t\t\t: value.labels.nodes.map(label => ({\n\t\t\t\t\tcolor: label.color,\n\t\t\t\t\tname: label.name,\n\t\t\t\t})),\n\t\tvalue.comments?.totalCount,\n\t\tvalue.reactions?.totalCount,\n\t\tvalue.body,\n\t);\n}\n\nfunction fromGitHubViewerPermissionToAccessLevel(\n\tpermission: GitHubViewerPermission | null | undefined,\n): RepositoryAccessLevel {\n\tswitch (permission) {\n\t\tcase 'ADMIN':\n\t\t\treturn RepositoryAccessLevel.Admin;\n\t\tcase 'MAINTAIN':\n\t\t\treturn RepositoryAccessLevel.Maintain;\n\t\tcase 'WRITE':\n\t\t\treturn RepositoryAccessLevel.Write;\n\t\tcase 'TRIAGE':\n\t\t\treturn RepositoryAccessLevel.Triage;\n\t\tcase 'READ':\n\t\t\treturn RepositoryAccessLevel.Read;\n\t\tdefault:\n\t\t\treturn RepositoryAccessLevel.None;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"models.js","names":[],"sources":["../../../../plus/git-github/src/models.ts"],"sourcesContent":["import type { Endpoints } from '@octokit/types';\nimport { GitFileIndexStatus } from '@gitlens/git/models/fileStatus.js';\nimport type { IssueLabel, IssueProjection } from '@gitlens/git/models/issue.js';\nimport { Issue, RepositoryAccessLevel } from '@gitlens/git/models/issue.js';\nimport type {\n\tPullRequestMember,\n\tPullRequestProjection,\n\tPullRequestStackInfo,\n\tPullRequestState,\n} from '@gitlens/git/models/pullRequest.js';\nimport {\n\tPullRequest,\n\tPullRequestMergeableState,\n\tPullRequestReviewDecision,\n\tPullRequestReviewState,\n\tPullRequestStatusCheckRollupState,\n} from '@gitlens/git/models/pullRequest.js';\nimport type { Provider } from '@gitlens/git/models/remoteProvider.js';\n\nexport interface GitHubBlame {\n\tranges: GitHubBlameRange[];\n\tviewer?: string;\n}\n\nexport interface GitHubBlameRange {\n\tstartingLine: number;\n\tendingLine: number;\n\tcommit: GitHubCommit;\n}\n\nexport interface GitHubBranch {\n\tname: string;\n\ttarget: {\n\t\toid: string;\n\t\tauthoredDate: string;\n\t\tcommittedDate: string;\n\t};\n}\n\nexport interface GitHubCommit {\n\toid: string;\n\tparents: { nodes: { oid: string }[] };\n\tmessage: string;\n\tadditions?: number | undefined;\n\tchangedFiles?: number | undefined;\n\tdeletions?: number | undefined;\n\tauthor: { avatarUrl: string | undefined; date: string; email: string | undefined; name: string };\n\tcommitter: { date: string; email: string | undefined; name: string };\n\n\tfiles?: Endpoints['GET /repos/{owner}/{repo}/commits/{ref}']['response']['data']['files'];\n}\n\nexport interface GitHubCommitRef {\n\toid: string;\n}\n\nexport type GitHubContributor = Endpoints['GET /repos/{owner}/{repo}/contributors']['response']['data'][0];\n\nexport type GitHubSshSigningKey = Endpoints['GET /users/{username}/ssh_signing_keys']['response']['data'][0];\n\nexport interface GitHubMember {\n\tlogin: string;\n\tavatarUrl: string;\n\turl: string;\n}\n\nexport interface GitHubPagedResult<T> {\n\tpageInfo: GitHubPageInfo;\n\ttotalCount: number;\n\tvalues: T[];\n}\nexport interface GitHubPageInfo {\n\tstartCursor?: string | null;\n\tendCursor?: string | null;\n\thasNextPage: boolean;\n\thasPreviousPage: boolean;\n}\n\nexport interface GitHubTag {\n\tname: string;\n\ttarget: {\n\t\toid: string;\n\t\tauthoredDate?: string;\n\t\tcommittedDate?: string;\n\t\tmessage?: string | null;\n\t\ttagger?: {\n\t\t\tdate: string;\n\t\t} | null;\n\n\t\ttarget?: {\n\t\t\toid?: string;\n\t\t\tauthoredDate?: string;\n\t\t\tcommittedDate?: string;\n\t\t\tmessage?: string | null;\n\t\t};\n\t};\n}\n\nexport type GitHubCommitFileStatus = NonNullable<\n\tEndpoints['GET /repos/{owner}/{repo}/commits/{ref}']['response']['data']['files']\n>[0]['status'];\n\nexport function fromCommitFileStatus(status: GitHubCommitFileStatus): GitFileIndexStatus | undefined {\n\tswitch (status) {\n\t\tcase 'added':\n\t\t\treturn GitFileIndexStatus.Added;\n\t\tcase 'changed':\n\t\tcase 'modified':\n\t\t\treturn GitFileIndexStatus.Modified;\n\t\tcase 'removed':\n\t\t\treturn GitFileIndexStatus.Deleted;\n\t\tcase 'renamed':\n\t\t\treturn GitFileIndexStatus.Renamed;\n\t\tcase 'copied':\n\t\t\treturn GitFileIndexStatus.Copied;\n\t}\n\treturn undefined;\n}\n\nexport interface GitHubIssueOrPullRequest {\n\t__typename: 'Issue' | 'PullRequest';\n\n\tclosed: boolean;\n\tclosedAt: string | null;\n\tcreatedAt: string;\n\tid: string;\n\tnumber: number;\n\tstate: GitHubIssueOrPullRequestState;\n\ttitle: string;\n\tupdatedAt: string;\n\turl: string;\n}\n\nexport type GitHubIssueState = 'OPEN' | 'CLOSED';\nexport type GitHubPullRequestState = 'OPEN' | 'CLOSED' | 'MERGED';\nexport type GitHubIssueOrPullRequestState = GitHubIssueState | GitHubPullRequestState;\n\nexport interface GitHubPullRequestLite extends Omit<GitHubIssueOrPullRequest, '__typename'> {\n\t/** `Actor` is nullable in GitHub's schema — `null` once the author's account is deleted */\n\tauthor: GitHubMember | null;\n\tbody: string | null;\n\n\tbaseRefName: string;\n\tbaseRefOid: string;\n\n\theadRefName: string;\n\theadRefOid: string;\n\theadRepository: {\n\t\tisFork: boolean;\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tsshUrl: string;\n\t\turl: string;\n\t};\n\n\tisCrossRepository: boolean;\n\tisDraft: boolean;\n\tmergedAt: string | null;\n\tpermalink: string;\n\n\trepository: {\n\t\tisFork: boolean;\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tsshUrl: string;\n\t\turl: string;\n\t\tviewerPermission: GitHubViewerPermission;\n\t};\n\n\t/** Only selected against github.com — GitHub Enterprise Server schemas lag and reject the field. */\n\tstack?: GitHubPullRequestStack | null;\n\t/** Only selected against github.com — see `stack`. */\n\tstackEntry?: { position: number } | null;\n}\n\n/** GitHub's stacked-pull-request object. Read-only; all stack mutations are REST-only. */\nexport interface GitHubPullRequestStack {\n\tid: string;\n\tnumber: number;\n\tsize: number;\n\t/** The branch the bottom of the stack targets — the stack's trunk. */\n\tbaseRefName: string;\n}\n\nexport interface GitHubIssue extends Omit<GitHubIssueOrPullRequest, '__typename'> {\n\t/** `Actor` is nullable in GitHub's schema — `null` once the author's account is deleted */\n\tauthor: GitHubMember | null;\n\tassignees: { nodes: GitHubMember[] };\n\tcomments?: {\n\t\ttotalCount: number;\n\t};\n\tlabels?: { nodes: IssueLabel[] };\n\treactions?: {\n\t\ttotalCount: number;\n\t};\n\trepository: {\n\t\tname: string;\n\t\towner: {\n\t\t\tlogin: string;\n\t\t};\n\t\tviewerPermission: GitHubViewerPermission;\n\t\turl: string;\n\t};\n\tbody: string;\n}\n\nexport type GitHubPullRequestReviewDecision = 'CHANGES_REQUESTED' | 'APPROVED' | 'REVIEW_REQUIRED';\nexport type GitHubPullRequestMergeableState = 'MERGEABLE' | 'CONFLICTING' | 'UNKNOWN';\nexport type GitHubPullRequestStatusCheckRollupState = 'SUCCESS' | 'FAILURE' | 'PENDING' | 'EXPECTED' | 'ERROR';\nexport type GitHubPullRequestReviewState = 'APPROVED' | 'CHANGES_REQUESTED' | 'COMMENTED' | 'DISMISSED' | 'PENDING';\n\ntype GitHubPullRequestReview = {\n\tid: string;\n\tauthor: GitHubMember | null;\n\tstate: GitHubPullRequestReviewState;\n\tcommit?: { oid: string } | null;\n};\n\nexport interface GitHubPullRequest extends GitHubPullRequestLite {\n\tadditions: number;\n\tassignees: {\n\t\tnodes: GitHubMember[];\n\t};\n\tchangedFiles: number;\n\tchecksUrl: string;\n\tdeletions: number;\n\tmergeable: GitHubPullRequestMergeableState;\n\treviewDecision: GitHubPullRequestReviewDecision;\n\tlatestReviews: {\n\t\tnodes: GitHubPullRequestReview[];\n\t};\n\t/**\n\t * The current user's own latest review. `latestReviews` is capped, so on a heavily-reviewed pull request\n\t * the viewer's own review can fall outside that window — which is exactly the row a \"needs my review\"\n\t * surface is asking about.\n\t */\n\tviewerLatestReview: GitHubPullRequestReview | null;\n\treviewRequests: {\n\t\tnodes: {\n\t\t\tasCodeOwner: boolean;\n\t\t\t/** Empty for a team (or anything else that isn't a user), which the `... on User` selection doesn't match. */\n\t\t\trequestedReviewer: Partial<GitHubMember> | null;\n\t\t}[];\n\t};\n\tcommits: {\n\t\ttotalCount: number;\n\t\tnodes: {\n\t\t\tcommit: {\n\t\t\t\tstatusCheckRollup: {\n\t\t\t\t\tstate: 'SUCCESS' | 'FAILURE' | 'PENDING' | 'EXPECTED' | 'ERROR';\n\t\t\t\t} | null;\n\t\t\t};\n\t\t}[];\n\t};\n\ttotalCommentsCount: number;\n\tviewerCanUpdate: boolean;\n}\n\n/**\n * An input beyond a pull request's lifecycle fields that `GitHubApi.getPullRequestsEtagFieldsBatch` can select.\n * Mirrors the integrations package's `PullRequestEtagInclude`, which this package cannot import.\n */\nexport type GitHubPullRequestEtagInclude = 'mergeable' | 'reviewDecision' | 'checks';\n\n/**\n * The change state `GitHubApi.getPullRequestsEtagFieldsBatch` selects: a pull request's lifecycle fields, plus,\n * for each requested {@link GitHubPullRequestEtagInclude}, what its etag reads. Each selection is the full\n * fragment's own, so a value here is the one a full read would have mapped.\n */\nexport interface GitHubPullRequestEtagNode extends Pick<\n\tGitHubPullRequest,\n\t'id' | 'number' | 'state' | 'isDraft' | 'updatedAt' | 'headRefOid'\n> {\n\t/** Only with `mergeable`. */\n\tmergeable?: GitHubPullRequestMergeableState | null;\n\t/** Only with `reviewDecision`. `null` on a repository that requires no review. */\n\treviewDecision?: GitHubPullRequestReviewDecision | null;\n\t/** Only with `checks`. */\n\tcommits?: {\n\t\tnodes: { commit: { statusCheckRollup: { state: GitHubPullRequestStatusCheckRollupState } | null } }[];\n\t};\n}\n\n/**\n * An input beyond an issue's lifecycle fields that `GitHubApi.getIssuesEtagFieldsBatch` can select. Mirrors the\n * integrations package's `IssueEtagInclude`, which this package cannot import.\n */\nexport type GitHubIssueEtagInclude = 'reactions';\n\n/**\n * The change state `GitHubApi.getIssuesEtagFieldsBatch` selects, plus, for each requested\n * {@link GitHubIssueEtagInclude}, the full fragment's own selection of it.\n */\nexport interface GitHubIssueEtagNode extends Pick<GitHubIssue, 'id' | 'number' | 'state' | 'updatedAt'> {\n\t/** Only with `reactions`: the thumbs-up reactions, as the full fragment selects them. */\n\treactions?: { totalCount: number };\n}\n\nexport type GitHubViewerPermission =\n\t| 'ADMIN' // Can read, clone, and push to this repository. Can also manage issues, pull requests, and repository settings, including adding collaborators\n\t| 'MAINTAIN' // Can read, clone, and push to this repository. They can also manage issues, pull requests, and some repository settings\n\t| 'WRITE' // Can read, clone, and push to this repository. Can also manage issues and pull requests\n\t| 'TRIAGE' // Can read and clone this repository. Can also manage issues and pull requests\n\t| 'READ' // Can read and clone this repository. Can also open and comment on issues and pull requests\n\t| 'NONE';\n\n/** `ghost` is how github.com renders an actor whose account was deleted, under the handle `ghost` */\nfunction fromGitHubMemberOrGhost(member: GitHubMember | null | undefined): PullRequestMember {\n\tif (member == null) return { id: 'ghost', name: 'ghost', username: 'ghost' };\n\n\treturn {\n\t\tid: member.login,\n\t\tname: member.login,\n\t\tusername: member.login,\n\t\tavatarUrl: member.avatarUrl,\n\t\turl: member.url,\n\t};\n}\n\nexport function fromGitHubPullRequestLite(\n\tpr: GitHubPullRequestLite,\n\tprovider: Provider,\n\tprojection?: PullRequestProjection,\n): PullRequest {\n\treturn new PullRequest(\n\t\tprovider,\n\t\tfromGitHubMemberOrGhost(pr.author),\n\t\tString(pr.number),\n\t\tpr.id,\n\t\tpr.title,\n\t\tpr.permalink,\n\t\t{\n\t\t\towner: pr.repository.owner.login,\n\t\t\trepo: pr.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(pr.repository.viewerPermission),\n\t\t},\n\t\tfromGitHubIssueOrPullRequestState(pr.state),\n\t\tnew Date(pr.createdAt),\n\t\tnew Date(pr.updatedAt),\n\t\tpr.closedAt == null ? undefined : new Date(pr.closedAt),\n\t\tpr.mergedAt == null ? undefined : new Date(pr.mergedAt),\n\t\tundefined,\n\t\tundefined,\n\t\t{\n\t\t\thead: {\n\t\t\t\texists: pr.headRepository != null,\n\t\t\t\towner: pr.headRepository?.owner.login,\n\t\t\t\trepo: pr.headRepository?.name,\n\t\t\t\tsha: pr.headRefOid,\n\t\t\t\tbranch: pr.headRefName,\n\t\t\t\turl: pr.headRepository?.url,\n\t\t\t\tcloneHttps: pr.headRepository != null ? `${pr.headRepository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.headRepository?.sshUrl,\n\t\t\t\tisFork: pr.headRepository?.isFork,\n\t\t\t},\n\t\t\tbase: {\n\t\t\t\texists: pr.repository != null,\n\t\t\t\towner: pr.repository?.owner.login,\n\t\t\t\trepo: pr.repository?.name,\n\t\t\t\tsha: pr.baseRefOid,\n\t\t\t\tbranch: pr.baseRefName,\n\t\t\t\turl: pr.repository?.url,\n\t\t\t\tcloneHttps: pr.repository != null ? `${pr.repository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.repository?.sshUrl,\n\t\t\t\tisFork: pr.repository?.isFork,\n\t\t\t},\n\t\t\tisCrossRepository: pr.isCrossRepository,\n\t\t},\n\t\tpr.isDraft,\n\t\t// The lite fragment selects nothing between `isDraft` and `stack`.\n\t\tundefined, // additions\n\t\tundefined, // deletions\n\t\tundefined, // commentsCount\n\t\tundefined, // thumbsUpCount\n\t\tundefined, // reviewDecision\n\t\tundefined, // reviewRequests\n\t\tundefined, // latestReviews\n\t\tundefined, // assignees\n\t\tundefined, // statusCheckRollupState\n\t\tundefined, // project\n\t\tundefined, // version\n\t\tundefined, // commitCount\n\t\tfromGitHubPullRequestStack(pr),\n\t\tundefined, // filesChanged\n\t\tpr.body ?? undefined,\n\t\tpr.number,\n\t\tundefined, // authoredByMe\n\t\tprojection,\n\t);\n}\n\n/** Both fields are absent on GitHub Enterprise Server (never selected) and `null` when unstacked. */\nfunction fromGitHubPullRequestStack(pr: GitHubPullRequestLite): PullRequestStackInfo | undefined {\n\tif (pr.stack == null || pr.stackEntry == null) return undefined;\n\n\treturn {\n\t\tid: pr.stack.id,\n\t\tnumber: pr.stack.number,\n\t\tsize: pr.stack.size,\n\t\tposition: pr.stackEntry.position,\n\t\tbaseRef: pr.stack.baseRefName,\n\t};\n}\n\nexport function fromGitHubIssueOrPullRequestState(state: GitHubPullRequestState): PullRequestState {\n\treturn state === 'MERGED' ? 'merged' : state === 'CLOSED' ? 'closed' : 'opened';\n}\n\nexport function toGitHubPullRequestState(state: PullRequestState): GitHubPullRequestState {\n\treturn state === 'merged' ? 'MERGED' : state === 'closed' ? 'CLOSED' : 'OPEN';\n}\n\nexport function fromGitHubPullRequestReviewDecision(\n\treviewDecision: GitHubPullRequestReviewDecision,\n): PullRequestReviewDecision {\n\tswitch (reviewDecision) {\n\t\tcase 'APPROVED':\n\t\t\treturn PullRequestReviewDecision.Approved;\n\t\tcase 'CHANGES_REQUESTED':\n\t\t\treturn PullRequestReviewDecision.ChangesRequested;\n\t\tcase 'REVIEW_REQUIRED':\n\t\t\treturn PullRequestReviewDecision.ReviewRequired;\n\t}\n}\n\nexport function fromGitHubPullRequestReviewState(state: GitHubPullRequestReviewState): PullRequestReviewState {\n\tswitch (state) {\n\t\tcase 'APPROVED':\n\t\t\treturn PullRequestReviewState.Approved;\n\t\tcase 'CHANGES_REQUESTED':\n\t\t\treturn PullRequestReviewState.ChangesRequested;\n\t\tcase 'COMMENTED':\n\t\t\treturn PullRequestReviewState.Commented;\n\t\tcase 'DISMISSED':\n\t\t\treturn PullRequestReviewState.Dismissed;\n\t\tcase 'PENDING':\n\t\t\treturn PullRequestReviewState.Pending;\n\t}\n}\n\nexport function toGitHubPullRequestReviewDecision(\n\treviewDecision: PullRequestReviewDecision,\n): GitHubPullRequestReviewDecision {\n\tswitch (reviewDecision) {\n\t\tcase PullRequestReviewDecision.Approved:\n\t\t\treturn 'APPROVED';\n\t\tcase PullRequestReviewDecision.ChangesRequested:\n\t\t\treturn 'CHANGES_REQUESTED';\n\t\tcase PullRequestReviewDecision.ReviewRequired:\n\t\t\treturn 'REVIEW_REQUIRED';\n\t}\n}\n\nexport function fromGitHubPullRequestMergeableState(\n\tmergeableState: GitHubPullRequestMergeableState,\n): PullRequestMergeableState {\n\tswitch (mergeableState) {\n\t\tcase 'MERGEABLE':\n\t\t\treturn PullRequestMergeableState.Mergeable;\n\t\tcase 'CONFLICTING':\n\t\t\treturn PullRequestMergeableState.Conflicting;\n\t\tcase 'UNKNOWN':\n\t\t\treturn PullRequestMergeableState.Unknown;\n\t}\n}\n\nexport function toGitHubPullRequestMergeableState(\n\tmergeableState: PullRequestMergeableState,\n): GitHubPullRequestMergeableState {\n\tswitch (mergeableState) {\n\t\tcase PullRequestMergeableState.Mergeable:\n\t\t\treturn 'MERGEABLE';\n\t\tcase PullRequestMergeableState.Conflicting:\n\t\t\treturn 'CONFLICTING';\n\t\tcase PullRequestMergeableState.FailingChecks:\n\t\t\treturn 'UNKNOWN';\n\t\tcase PullRequestMergeableState.BlockedByPolicy:\n\t\t\treturn 'UNKNOWN';\n\t\tcase PullRequestMergeableState.Unknown:\n\t\t\treturn 'UNKNOWN';\n\t}\n}\n\nexport function fromGitHubPullRequestStatusCheckRollupState(\n\tstate: GitHubPullRequestStatusCheckRollupState | null | undefined,\n): PullRequestStatusCheckRollupState | undefined {\n\tswitch (state) {\n\t\tcase 'SUCCESS':\n\t\tcase 'EXPECTED':\n\t\t\treturn PullRequestStatusCheckRollupState.Success;\n\t\tcase 'FAILURE':\n\t\tcase 'ERROR':\n\t\t\treturn PullRequestStatusCheckRollupState.Failed;\n\t\tcase 'PENDING':\n\t\t\treturn PullRequestStatusCheckRollupState.Pending;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nexport function fromGitHubPullRequest(\n\tpr: GitHubPullRequest,\n\tprovider: Provider,\n\tprojection?: PullRequestProjection,\n): PullRequest {\n\t// `latestReviews` is capped, so keep the viewer's own review even when it falls outside that window, deduped\n\t// by review id since the two selections overlap. Unsubmitted drafts are dropped from the union rather than\n\t// from the viewer's side alone: `PENDING` is in GitHub's review-state enum on both selections, and the field\n\t// this feeds is documented as reviews already SUBMITTED — a draft there tells a \"needs my review\" consumer\n\t// the review is done, and a reviewer with a submitted review plus a draft would get two conflicting rows.\n\tconst viewerLatestReview = pr.viewerLatestReview;\n\tconst latestReviews = [\n\t\t...pr.latestReviews.nodes,\n\t\t...(viewerLatestReview != null && !pr.latestReviews.nodes.some(r => r.id === viewerLatestReview.id)\n\t\t\t? [viewerLatestReview]\n\t\t\t: []),\n\t].filter(review => review.state !== 'PENDING');\n\n\treturn new PullRequest(\n\t\tprovider,\n\t\tfromGitHubMemberOrGhost(pr.author),\n\t\tString(pr.number),\n\t\tpr.id,\n\t\tpr.title,\n\t\tpr.permalink,\n\t\t{\n\t\t\towner: pr.repository.owner.login,\n\t\t\trepo: pr.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(pr.repository.viewerPermission),\n\t\t},\n\t\tfromGitHubIssueOrPullRequestState(pr.state),\n\t\tnew Date(pr.createdAt),\n\t\tnew Date(pr.updatedAt),\n\t\tpr.closedAt == null ? undefined : new Date(pr.closedAt),\n\t\tpr.mergedAt == null ? undefined : new Date(pr.mergedAt),\n\t\tfromGitHubPullRequestMergeableState(pr.mergeable),\n\t\tpr.viewerCanUpdate,\n\t\t{\n\t\t\thead: {\n\t\t\t\texists: pr.headRepository != null,\n\t\t\t\towner: pr.headRepository?.owner.login,\n\t\t\t\trepo: pr.headRepository?.name,\n\t\t\t\tsha: pr.headRefOid,\n\t\t\t\tbranch: pr.headRefName,\n\t\t\t\turl: pr.headRepository?.url,\n\t\t\t\tcloneHttps: pr.headRepository != null ? `${pr.headRepository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.headRepository?.sshUrl,\n\t\t\t\tisFork: pr.headRepository?.isFork,\n\t\t\t},\n\t\t\tbase: {\n\t\t\t\texists: pr.repository != null,\n\t\t\t\towner: pr.repository?.owner.login,\n\t\t\t\trepo: pr.repository?.name,\n\t\t\t\tsha: pr.baseRefOid,\n\t\t\t\tbranch: pr.baseRefName,\n\t\t\t\turl: pr.repository?.url,\n\t\t\t\tcloneHttps: pr.repository != null ? `${pr.repository.url}.git` : undefined,\n\t\t\t\tcloneSsh: pr.repository?.sshUrl,\n\t\t\t\tisFork: pr.repository?.isFork,\n\t\t\t},\n\t\t\tisCrossRepository: pr.isCrossRepository,\n\t\t},\n\t\tpr.isDraft,\n\t\tpr.additions,\n\t\tpr.deletions,\n\t\tpr.totalCommentsCount,\n\t\tundefined, // thumbsUpCount: the fragment selects no reactions\n\t\tfromGitHubPullRequestReviewDecision(pr.reviewDecision),\n\t\tpr.reviewRequests.nodes\n\t\t\t.map(r =>\n\t\t\t\tr.requestedReviewer != null\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tisCodeOwner: r.asCodeOwner,\n\t\t\t\t\t\t\treviewer: {\n\t\t\t\t\t\t\t\t// A team has no login: an empty id, which matches no one, rather than a missing one.\n\t\t\t\t\t\t\t\tid: r.requestedReviewer.login ?? '',\n\t\t\t\t\t\t\t\tname: r.requestedReviewer.login,\n\t\t\t\t\t\t\t\tusername: r.requestedReviewer.login,\n\t\t\t\t\t\t\t\tavatarUrl: r.requestedReviewer.avatarUrl,\n\t\t\t\t\t\t\t\turl: r.requestedReviewer.url,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstate: PullRequestReviewState.ReviewRequested,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t)\n\t\t\t.filter(<T>(r?: T): r is T => Boolean(r)),\n\t\tlatestReviews.map(r => ({\n\t\t\treviewer: fromGitHubMemberOrGhost(r.author),\n\t\t\tstate: fromGitHubPullRequestReviewState(r.state),\n\t\t\tcommitOid: r.commit?.oid,\n\t\t})),\n\t\tpr.assignees.nodes.map(r => ({\n\t\t\tid: r.login,\n\t\t\tname: r.login,\n\t\t\tusername: r.login,\n\t\t\tavatarUrl: r.avatarUrl,\n\t\t\turl: r.url,\n\t\t})),\n\t\tfromGitHubPullRequestStatusCheckRollupState(pr.commits.nodes?.[0]?.commit.statusCheckRollup?.state),\n\t\tundefined, // project\n\t\tundefined, // version\n\t\tpr.commits.totalCount,\n\t\tfromGitHubPullRequestStack(pr),\n\t\tpr.changedFiles,\n\t\tpr.body ?? undefined,\n\t\tpr.number,\n\t\tundefined, // authoredByMe\n\t\tprojection,\n\t);\n}\n\nexport function fromGitHubIssue(value: GitHubIssue, provider: Provider, projection?: IssueProjection): Issue {\n\treturn new Issue(\n\t\t{\n\t\t\tid: provider.id,\n\t\t\tname: provider.name,\n\t\t\tdomain: provider.domain,\n\t\t\ticon: provider.icon,\n\t\t},\n\t\tString(value.number),\n\t\tvalue.id,\n\t\tvalue.title,\n\t\tvalue.url,\n\t\tnew Date(value.createdAt),\n\t\tnew Date(value.updatedAt),\n\t\tvalue.closed,\n\t\tfromGitHubIssueOrPullRequestState(value.state),\n\t\tvalue.author == null\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tid: value.author.login,\n\t\t\t\t\tname: value.author.login,\n\t\t\t\t\tusername: value.author.login,\n\t\t\t\t\tavatarUrl: value.author.avatarUrl,\n\t\t\t\t\turl: value.author.url,\n\t\t\t\t},\n\t\tvalue.assignees.nodes.map(assignee => ({\n\t\t\tid: assignee.login,\n\t\t\tname: assignee.login,\n\t\t\tusername: assignee.login,\n\t\t\tavatarUrl: assignee.avatarUrl,\n\t\t\turl: assignee.url,\n\t\t})),\n\t\t{\n\t\t\towner: value.repository.owner.login,\n\t\t\trepo: value.repository.name,\n\t\t\taccessLevel: fromGitHubViewerPermissionToAccessLevel(value.repository.viewerPermission),\n\t\t\turl: value.repository.url,\n\t\t},\n\t\tvalue.closedAt == null ? undefined : new Date(value.closedAt),\n\t\tvalue.labels?.nodes == null\n\t\t\t? undefined\n\t\t\t: value.labels.nodes.map(label => ({\n\t\t\t\t\tcolor: label.color,\n\t\t\t\t\tname: label.name,\n\t\t\t\t})),\n\t\tvalue.comments?.totalCount,\n\t\tvalue.reactions?.totalCount,\n\t\tvalue.body,\n\t\tundefined, // project\n\t\tundefined, // number\n\t\tundefined, // issueType\n\t\tundefined, // providerState\n\t\tundefined, // bodyFormat\n\t\tundefined, // iterations\n\t\tprojection,\n\t);\n}\n\nfunction fromGitHubViewerPermissionToAccessLevel(\n\tpermission: GitHubViewerPermission | null | undefined,\n): RepositoryAccessLevel {\n\tswitch (permission) {\n\t\tcase 'ADMIN':\n\t\t\treturn RepositoryAccessLevel.Admin;\n\t\tcase 'MAINTAIN':\n\t\t\treturn RepositoryAccessLevel.Maintain;\n\t\tcase 'WRITE':\n\t\t\treturn RepositoryAccessLevel.Write;\n\t\tcase 'TRIAGE':\n\t\t\treturn RepositoryAccessLevel.Triage;\n\t\tcase 'READ':\n\t\t\treturn RepositoryAccessLevel.Read;\n\t\tdefault:\n\t\t\treturn RepositoryAccessLevel.None;\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { IssueShape } from "../../git/models/issue.js";
2
+ import { PullRequestShape } from "../../git/models/pullRequest.js";
3
+ //#region ../plus/integrations/src/fieldPresence.d.ts
4
+ /**
5
+ * Whether a row's read fetched a field group.
6
+ *
7
+ * - `fetched`: the read asked for it and surfaces it, so an empty value means "none".
8
+ * - `not-requested`: this read didn't ask for it, or asked but doesn't surface it faithfully. Ignore the value even
9
+ * when one is present (some reads fill placeholders); another read may supply it.
10
+ * - `unavailable`: this provider or host can't supply it on this read.
11
+ */
12
+ export type FieldPresence = 'fetched' | 'not-requested' | 'unavailable';
13
+ /** A group is `fetched` only when every field in it is. */
14
+ export type PullRequestFieldGroup =
15
+ /** `body`. */
16
+ 'description' |
17
+ /** `latestReviews`. */
18
+ 'reviews' |
19
+ /**
20
+ * `reviewRequests`: who is requested. Not each request's `isCodeOwner`, which only GitLens' own GitHub reads
21
+ * report; every other row leaves it undefined.
22
+ */
23
+ 'reviewRequests' |
24
+ /**
25
+ * `reviewDecision`. Only GitHub reports one; elsewhere it is derived from the reviewers' states on the row, which
26
+ * ignores the host's own approval rules, so it is never `fetched` there — derive it from `reviews` and
27
+ * `reviewRequests` instead.
28
+ */
29
+ 'reviewDecision' |
30
+ /** `assignees`. */
31
+ 'assignees' |
32
+ /** `statusCheckRollupState`, on the `PullRequest` class. */
33
+ 'checks' |
34
+ /** `mergeableState`. */
35
+ 'mergeable' |
36
+ /** `additions`, `deletions` and `filesChanged`. */
37
+ 'diffStats' |
38
+ /** `commitCount`, on the `PullRequest` class. */
39
+ 'commitCount' |
40
+ /** `commentsCount`. */
41
+ 'comments' |
42
+ /** `thumbsUpCount`. */
43
+ 'reactions' |
44
+ /** `viewerCanUpdate`, on the `PullRequest` class, and `repository.accessLevel`. */
45
+ 'access' |
46
+ /** `authoredByMe`, and the `viewer` it was matched against. */
47
+ 'authoredByMe' |
48
+ /** `stack`. */
49
+ 'stack';
50
+ /** A group is `fetched` only when every field in it is. */
51
+ export type IssueFieldGroup =
52
+ /** `body`. */
53
+ 'description' |
54
+ /** `assignees`. */
55
+ 'assignees' |
56
+ /** `labels`. */
57
+ 'labels' |
58
+ /** `commentsCount`. */
59
+ 'comments' |
60
+ /** `thumbsUpCount`. */
61
+ 'reactions' |
62
+ /** `repository.accessLevel`. */
63
+ 'access';
64
+ /**
65
+ * Which field groups the read that produced `pr` fetched, keyed by its provider and {@link PullRequestShape.projection}.
66
+ * `undefined` when either is unknown or the provider has no table yet — then nothing can be said about any field.
67
+ */
68
+ export declare function getPullRequestFieldPresence(pr: PullRequestShape): Readonly<Record<PullRequestFieldGroup, FieldPresence>> | undefined;
69
+ /**
70
+ * Which field groups the read that produced `issue` fetched, keyed by its provider and {@link IssueShape.projection}.
71
+ * `undefined` when either is unknown or the provider has no table yet — then nothing can be said about any field.
72
+ */
73
+ export declare function getIssueFieldPresence(issue: IssueShape): Readonly<Record<IssueFieldGroup, FieldPresence>> | undefined;
74
+ //#endregion
75
+ //# sourceMappingURL=fieldPresence.d.ts.map