import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, MappedOmit, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; import { SimpleUserSchema } from './Users'; import { MilestoneSchema } from '../templates/ResourceMilestones'; export interface IssueLinkSchema extends Record { id: number; iid: number; project_id: number; issue_link_id: number; state: string; description: string; weight?: number; author: MappedOmit; milestone: MilestoneSchema; assignees?: MappedOmit[]; title: string; labels?: string[]; user_notes_count: number; due_date: string; web_url: string; confidential: boolean; updated_at: string; link_created_at: string; link_updated_at: string; link_type: 'relates_to' | 'blocks' | 'is_blocked_by'; } export interface ExpandedIssueLinkSchema extends Record { source_issue: MappedOmit< IssueLinkSchema, 'link_type' | 'link_created_at' | 'link_updated_at' | 'issue_link_id' >; target_issue: MappedOmit< IssueLinkSchema, 'link_type' | 'link_created_at' | 'link_updated_at' | 'issue_link_id' >; link_type: 'relates_to' | 'blocks' | 'is_blocked_by'; } export class IssueLinks extends BaseResource { all( projectId: string | number, issueIId: number, options?: Sudo & ShowExpanded & PaginationRequestOptions

, ): Promise> { return RequestHelper.get()( this, endpoint`projects/${projectId}/issues/${issueIId}/links`, options, ); } create( projectId: string | number, issueIId: number, targetProjectId: string | number, targetIssueIId: number, options?: { linkType?: 'relates_to' | 'blocks' | 'is_blocked_by' } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()( this, endpoint`projects/${projectId}/issues/${issueIId}/links`, { targetProjectId, targetIssueIid: targetIssueIId, ...options, }, ); } remove( projectId: string | number, issueIId: number, issueLinkId: number, options?: { linkType?: 'relates_to' | 'blocks' | 'is_blocked_by' } & Sudo & ShowExpanded, ): Promise> { return RequestHelper.del()( this, endpoint`projects/${projectId}/issues/${issueIId}/links/${issueLinkId}`, options, ); } }