import { normalizeProjectLocator, pickAuthInput, request } from '../core.ts' import { asRecord, pickQuery, slimPipeline } from '../shape.ts' const QUERY_KEYS = [ 'ref', 'status', 'source', 'sha', 'name', 'username', 'order_by', 'sort', 'page', 'per_page', ] as const /** * List pipelines for a GitLab project. * * @example * import listGitlabPipelines from 'kody:@kody/gitlab/pipelines/list' * const result = await listGitlabPipelines({ * project: 'example-group/example-project', * ref: 'main', * }) */ export default async function listGitlabPipelines(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}/pipelines`, query, throwOnError: true, }) const items = Array.isArray(response.data) ? response.data.map((item) => slimPipeline(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, } }