@@ -30,12 +30,13 @@ import type { Account as UserAccount } from '../../../git/models/author';
30
30
import type { IssueMember , SearchedIssue } from '../../../git/models/issue' ;
31
31
import { RepositoryAccessLevel } from '../../../git/models/issue' ;
32
32
import type {
33
- PullRequest ,
34
33
PullRequestMember ,
35
34
PullRequestRefs ,
36
35
PullRequestReviewer ,
36
+ PullRequestState ,
37
37
} from '../../../git/models/pullRequest' ;
38
38
import {
39
+ PullRequest ,
39
40
PullRequestMergeableState ,
40
41
PullRequestReviewDecision ,
41
42
PullRequestReviewState ,
@@ -44,6 +45,7 @@ import {
44
45
import type { ProviderReference } from '../../../git/models/remoteProvider' ;
45
46
import type { RepositoryIdentityDescriptor } from '../../../gk/models/repositoryIdentities' ;
46
47
import type { EnrichableItem } from '../../focus/enrichmentService' ;
48
+ import type { Integration } from '../integration' ;
47
49
import { getEntityIdentifierInput } from './utils' ;
48
50
49
51
export type ProviderAccount = Account ;
@@ -560,6 +562,20 @@ export const toProviderBuildStatusState = {
560
562
[ PullRequestStatusCheckRollupState . Pending ] : GitBuildStatusState . Pending ,
561
563
} ;
562
564
565
+ export const fromProviderBuildStatusState = {
566
+ [ GitBuildStatusState . Success ] : PullRequestStatusCheckRollupState . Success ,
567
+ [ GitBuildStatusState . Failed ] : PullRequestStatusCheckRollupState . Failed ,
568
+ [ GitBuildStatusState . Pending ] : PullRequestStatusCheckRollupState . Pending ,
569
+ [ GitBuildStatusState . ActionRequired ] : PullRequestStatusCheckRollupState . Failed ,
570
+ // TODO: The rest of these are defaulted because we don't have a matching state for them
571
+ [ GitBuildStatusState . Error ] : undefined ,
572
+ [ GitBuildStatusState . Cancelled ] : undefined ,
573
+ [ GitBuildStatusState . OptionalActionRequired ] : undefined ,
574
+ [ GitBuildStatusState . Skipped ] : undefined ,
575
+ [ GitBuildStatusState . Running ] : undefined ,
576
+ [ GitBuildStatusState . Warning ] : undefined ,
577
+ } ;
578
+
563
579
export const toProviderPullRequestReviewState = {
564
580
[ PullRequestReviewState . Approved ] : GitPullRequestReviewState . Approved ,
565
581
[ PullRequestReviewState . ChangesRequested ] : GitPullRequestReviewState . ChangesRequested ,
@@ -569,12 +585,29 @@ export const toProviderPullRequestReviewState = {
569
585
[ PullRequestReviewState . Pending ] : null ,
570
586
} ;
571
587
588
+ export const fromProviderPullRequestReviewState = {
589
+ [ GitPullRequestReviewState . Approved ] : PullRequestReviewState . Approved ,
590
+ [ GitPullRequestReviewState . ChangesRequested ] : PullRequestReviewState . ChangesRequested ,
591
+ [ GitPullRequestReviewState . Commented ] : PullRequestReviewState . Commented ,
592
+ [ GitPullRequestReviewState . ReviewRequested ] : PullRequestReviewState . ReviewRequested ,
593
+ } ;
594
+
572
595
export const toProviderPullRequestMergeableState = {
573
596
[ PullRequestMergeableState . Mergeable ] : GitPullRequestMergeableState . Mergeable ,
574
597
[ PullRequestMergeableState . Conflicting ] : GitPullRequestMergeableState . Conflicts ,
575
598
[ PullRequestMergeableState . Unknown ] : GitPullRequestMergeableState . Unknown ,
576
599
} ;
577
600
601
+ export const fromProviderPullRequestMergeableState = {
602
+ [ GitPullRequestMergeableState . Mergeable ] : PullRequestMergeableState . Mergeable ,
603
+ [ GitPullRequestMergeableState . Conflicts ] : PullRequestMergeableState . Conflicting ,
604
+ [ GitPullRequestMergeableState . Unknown ] : PullRequestMergeableState . Unknown ,
605
+ [ GitPullRequestMergeableState . Behind ] : PullRequestMergeableState . Unknown ,
606
+ [ GitPullRequestMergeableState . Blocked ] : PullRequestMergeableState . Unknown ,
607
+ [ GitPullRequestMergeableState . UnknownAndBlocked ] : PullRequestMergeableState . Unknown ,
608
+ [ GitPullRequestMergeableState . Unstable ] : PullRequestMergeableState . Unknown ,
609
+ } ;
610
+
578
611
export function toProviderReviews ( reviewers : PullRequestReviewer [ ] ) : ProviderPullRequest [ 'reviews' ] {
579
612
return reviewers
580
613
. filter ( r => r . state !== PullRequestReviewState . Dismissed && r . state !== PullRequestReviewState . Pending )
@@ -584,6 +617,30 @@ export function toProviderReviews(reviewers: PullRequestReviewer[]): ProviderPul
584
617
} ) ) ;
585
618
}
586
619
620
+ export function toReviewRequests ( reviews : ProviderPullRequest [ 'reviews' ] ) : PullRequestReviewer [ ] | undefined {
621
+ return reviews == null
622
+ ? undefined
623
+ : reviews
624
+ ?. filter ( r => r . state === GitPullRequestReviewState . ReviewRequested )
625
+ . map ( r => ( {
626
+ isCodeOwner : false , // TODO: Find this value, and implement in the shared lib if needed
627
+ reviewer : fromProviderAccount ( r . reviewer ) ,
628
+ state : PullRequestReviewState . ReviewRequested ,
629
+ } ) ) ;
630
+ }
631
+
632
+ export function toCompletedReviews ( reviews : ProviderPullRequest [ 'reviews' ] ) : PullRequestReviewer [ ] | undefined {
633
+ return reviews == null
634
+ ? undefined
635
+ : reviews
636
+ ?. filter ( r => r . state !== GitPullRequestReviewState . ReviewRequested )
637
+ . map ( r => ( {
638
+ isCodeOwner : false , // TODO: Find this value, and implement in the shared lib if needed
639
+ reviewer : fromProviderAccount ( r . reviewer ) ,
640
+ state : fromProviderPullRequestReviewState [ r . state ] ,
641
+ } ) ) ;
642
+ }
643
+
587
644
export function toProviderReviewDecision (
588
645
reviewDecision ?: PullRequestReviewDecision ,
589
646
reviewers ?: PullRequestReviewer [ ] ,
@@ -606,6 +663,25 @@ export function toProviderReviewDecision(
606
663
}
607
664
}
608
665
666
+ export const fromPullRequestReviewDecision = {
667
+ [ GitPullRequestReviewState . Approved ] : PullRequestReviewDecision . Approved ,
668
+ [ GitPullRequestReviewState . ChangesRequested ] : PullRequestReviewDecision . ChangesRequested ,
669
+ [ GitPullRequestReviewState . Commented ] : undefined ,
670
+ [ GitPullRequestReviewState . ReviewRequested ] : PullRequestReviewDecision . ReviewRequired ,
671
+ } ;
672
+
673
+ export function toProviderPullRequestState ( state : PullRequestState ) : GitPullRequestState {
674
+ return state === 'opened'
675
+ ? GitPullRequestState . Open
676
+ : state === 'closed'
677
+ ? GitPullRequestState . Closed
678
+ : GitPullRequestState . Merged ;
679
+ }
680
+
681
+ export function fromProviderPullRequestState ( state : GitPullRequestState ) : PullRequestState {
682
+ return state === GitPullRequestState . Open ? 'opened' : state === GitPullRequestState . Closed ? 'closed' : 'merged' ;
683
+ }
684
+
609
685
export function toProviderPullRequest ( pr : PullRequest ) : ProviderPullRequest {
610
686
const prReviews = [ ...( pr . reviewRequests ?? [ ] ) , ...( pr . latestReviews ?? [ ] ) ] ;
611
687
return {
@@ -614,12 +690,7 @@ export function toProviderPullRequest(pr: PullRequest): ProviderPullRequest {
614
690
number : Number . parseInt ( pr . id , 10 ) ,
615
691
title : pr . title ,
616
692
url : pr . url ,
617
- state :
618
- pr . state === 'opened'
619
- ? GitPullRequestState . Open
620
- : pr . state === 'closed'
621
- ? GitPullRequestState . Closed
622
- : GitPullRequestState . Merged ,
693
+ state : toProviderPullRequestState ( pr . state ) ,
623
694
isDraft : pr . isDraft ?? false ,
624
695
createdDate : pr . createdDate ,
625
696
updatedDate : pr . updatedDate ,
@@ -710,6 +781,63 @@ export function toProviderPullRequest(pr: PullRequest): ProviderPullRequest {
710
781
} ;
711
782
}
712
783
784
+ export function fromProviderPullRequest ( pr : ProviderPullRequest , integration : Integration ) : PullRequest {
785
+ return new PullRequest (
786
+ integration ,
787
+ fromProviderAccount ( pr . author ) ,
788
+ pr . id ,
789
+ pr . graphQLId ,
790
+ pr . title ,
791
+ pr . url ?? '' ,
792
+ {
793
+ owner : pr . repository . owner . login ,
794
+ repo : pr . repository . name ,
795
+ } ,
796
+ fromProviderPullRequestState ( pr . state ) ,
797
+ pr . createdDate ,
798
+ pr . updatedDate ,
799
+ pr . closedDate ?? undefined ,
800
+ pr . mergedDate ?? undefined ,
801
+ pr . mergeableState ? fromProviderPullRequestMergeableState [ pr . mergeableState ] : undefined ,
802
+ pr . permissions ?. canMerge || pr . permissions ?. canMergeAndBypassProtections ? true : undefined ,
803
+ {
804
+ base : {
805
+ branch : pr . baseRef ?. name ?? '' ,
806
+ sha : pr . baseRef ?. oid ?? '' ,
807
+ repo : pr . repository . name ,
808
+ owner : pr . repository . owner . login ,
809
+ exists : pr . baseRef != null ,
810
+ url : pr . repository . remoteInfo ?. cloneUrlHTTPS
811
+ ? pr . repository . remoteInfo . cloneUrlHTTPS . replace ( / \. g i t $ / , '' )
812
+ : '' ,
813
+ } ,
814
+ head : {
815
+ branch : pr . headRef ?. name ?? '' ,
816
+ sha : pr . headRef ?. oid ?? '' ,
817
+ repo : pr . headRepository ?. name ?? '' ,
818
+ owner : pr . headRepository ?. owner . login ?? '' ,
819
+ exists : pr . headRef != null ,
820
+ url : pr . headRepository ?. remoteInfo ?. cloneUrlHTTPS
821
+ ? pr . headRepository . remoteInfo . cloneUrlHTTPS . replace ( / \. g i t $ / , '' )
822
+ : '' ,
823
+ } ,
824
+ isCrossRepository : pr . headRepository ?. id !== pr . repository . id ,
825
+ } ,
826
+ pr . isDraft ,
827
+ pr . additions ?? undefined ,
828
+ pr . deletions ?? undefined ,
829
+ pr . commentCount ?? undefined ,
830
+ pr . upvoteCount ?? undefined ,
831
+ pr . reviewDecision ? fromPullRequestReviewDecision [ pr . reviewDecision ] : undefined ,
832
+ toReviewRequests ( pr . reviews ) ,
833
+ toCompletedReviews ( pr . reviews ) ,
834
+ pr . assignees ?. map ( fromProviderAccount ) ?? undefined ,
835
+ pr . headCommit ?. buildStatuses ?. [ 0 ] ?. state
836
+ ? fromProviderBuildStatusState [ pr . headCommit . buildStatuses [ 0 ] . state ]
837
+ : undefined ,
838
+ ) ;
839
+ }
840
+
713
841
export function toProviderPullRequestWithUniqueId ( pr : PullRequest ) : PullRequestWithUniqueID {
714
842
return {
715
843
...toProviderPullRequest ( pr ) ,
@@ -729,6 +857,14 @@ export function toProviderAccount(account: PullRequestMember | IssueMember): Pro
729
857
} ;
730
858
}
731
859
860
+ export function fromProviderAccount ( account : ProviderAccount | null ) : PullRequestMember | IssueMember {
861
+ return {
862
+ name : account ?. name ?? 'unknown' ,
863
+ avatarUrl : account ?. avatarUrl ?? undefined ,
864
+ url : account ?. url ?? '' ,
865
+ } ;
866
+ }
867
+
732
868
export type ProviderActionablePullRequest = ActionablePullRequest ;
733
869
734
870
export type EnrichablePullRequest = ProviderPullRequest & {
0 commit comments