mirror of https://github.com/renovatebot/renovate
60 lines
1.3 KiB
TypeScript
60 lines
1.3 KiB
TypeScript
import is from '@sindresorhus/is';
|
|
import { GithubHttp } from '../../../util/http/github';
|
|
import { getPrBodyStruct } from '../pr-body';
|
|
import type { GhPr, GhRestPr } from './types';
|
|
|
|
export const githubApi = new GithubHttp();
|
|
|
|
/**
|
|
* @see https://docs.github.com/en/rest/reference/pulls#list-pull-requests
|
|
*/
|
|
export function coerceRestPr(pr: GhRestPr): GhPr {
|
|
const bodyStruct = pr.bodyStruct ?? getPrBodyStruct(pr.body);
|
|
const result: GhPr = {
|
|
number: pr.number,
|
|
sourceBranch: pr.head?.ref,
|
|
title: pr.title,
|
|
state:
|
|
pr.state === 'closed' && is.string(pr.merged_at) ? 'merged' : pr.state,
|
|
bodyStruct,
|
|
updated_at: pr.updated_at,
|
|
node_id: pr.node_id,
|
|
};
|
|
|
|
if (pr.head?.sha) {
|
|
result.sha = pr.head.sha;
|
|
}
|
|
|
|
if (pr.head?.repo?.full_name) {
|
|
result.sourceRepo = pr.head.repo.full_name;
|
|
}
|
|
|
|
if (pr.labels) {
|
|
result.labels = pr.labels.map(({ name }) => name);
|
|
}
|
|
|
|
if (!!pr.assignee || is.nonEmptyArray(pr.assignees)) {
|
|
result.hasAssignees = true;
|
|
}
|
|
|
|
if (pr.requested_reviewers) {
|
|
result.reviewers = pr.requested_reviewers
|
|
.map(({ login }) => login)
|
|
.filter(is.nonEmptyString);
|
|
}
|
|
|
|
if (pr.created_at) {
|
|
result.createdAt = pr.created_at;
|
|
}
|
|
|
|
if (pr.closed_at) {
|
|
result.closedAt = pr.closed_at;
|
|
}
|
|
|
|
if (pr.base?.ref) {
|
|
result.targetBranch = pr.base.ref;
|
|
}
|
|
|
|
return result;
|
|
}
|