import { normalizeProjectLocator, pickAuthInput, request } from '../core.ts'
import { asRecord, pickQuery, slimMergeRequest } from '../shape.ts'
const QUERY_KEYS = [
'state',
'labels',
'search',
'source_branch',
'target_branch',
'wip',
'order_by',
'sort',
'page',
'per_page',
] as const
/**
* List merge requests for a GitLab project.
*
* @example
* import listGitlabMergeRequests from 'kody:@kody/gitlab/merge-requests/list'
* const result = await listGitlabMergeRequests({
* project: 'example-group/example-project',
* state: 'opened',
* })
*/
export default async function listGitlabMergeRequests(params: Record<string, unknown> = {}) {
const auth = pickAuthInput(params)
const { projectId, projectPath } = normalizeProjectLocator(params)
const query = pickQuery(params, QUERY_KEYS)
const response = await request<unknown[]>({
...auth,
path: `/projects/${projectId}/merge_requests`,
query,
throwOnError: true,
})
const items = Array.isArray(response.data)
? response.data.map((item) => slimMergeRequest(asRecord(item)))
: []
return {
items,
projectPath,
page: response.headers['x-page'] ?? null,
nextPage: response.headers['x-next-page'] ?? null,
total: response.headers['x-total'] ?? null,
auth: response.auth,
}
}