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 = {}) { const auth = pickAuthInput(params) const { projectId, projectPath } = normalizeProjectLocator(params) const query = pickQuery(params, QUERY_KEYS) const response = await request({ ...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, } }