/** * Issue reference extraction utility. * * Extracts issue references from text (commit messages, PR bodies, etc.) * Supports various formats: * - Simple: #123 * - Cross-repo: owner/repo#123 * - With prefix: Fixes #123, Closes owner/repo#123, Resolves #456 * - Case insensitive prefixes */ /** * Valid prefix keywords that indicate an issue closing action. */ export type IssueRefPrefix = 'fixes' | 'closes' | 'resolves' | 'refs'; /** * Represents a parsed issue reference from text. */ export interface IIssueRef { /** The issue number */ number: number; /** Optional owner (for cross-repo references) */ owner?: string; /** Optional repo name (for cross-repo references) */ repo?: string; /** Optional action prefix (fixes, closes, resolves, refs) */ prefix?: IssueRefPrefix; /** The full matched text */ raw: string; } /** * Result of issue reference extraction with context. */ export interface IIssueRefResult { /** All extracted issue references */ refs: IIssueRef[]; /** References that would close an issue (fixes, closes, resolves) */ closingRefs: IIssueRef[]; /** References that just mention an issue (refs, no prefix) */ mentionRefs: IIssueRef[]; /** Whether any closing references were found */ hasClosingRefs: boolean; } /** * Extract issue references from text. * * Matches patterns like: * - #123 * - owner/repo#123 * - fixes #123 * - Closes owner/repo#123 * - RESOLVES #456 * * @param text - Text to search (commit message, PR body, etc.) * @returns Array of parsed issue references * * @example * ```typescript * extractIssueRefs('Fixes #123 and refs owner/repo#456') * // Returns: * // [ * // { number: 123, prefix: 'fixes', raw: 'Fixes #123' }, * // { number: 456, owner: 'owner', repo: 'repo', prefix: 'refs', raw: 'refs owner/repo#456' } * // ] * ``` */ export declare function extractIssueRefs(text: string): IIssueRef[]; /** * Extract issue references with categorization. * * @param text - Text to search * @returns Result with categorized references * * @example * ```typescript * extractIssueRefsWithContext('Fixes #123 and refs #456') * // Returns: * // { * // refs: [...], * // closingRefs: [{ number: 123, prefix: 'fixes', ... }], * // mentionRefs: [{ number: 456, prefix: 'refs', ... }], * // hasClosingRefs: true * // } * ``` */ export declare function extractIssueRefsWithContext(text: string): IIssueRefResult; /** * Build a GitHub issue URL from a reference. * * @param ref - Issue reference * @param defaultOwner - Default owner if not in reference * @param defaultRepo - Default repo if not in reference * @returns Full GitHub issue URL * * @example * ```typescript * buildIssueUrl({ number: 123 }, 'myorg', 'myrepo') * // Returns: 'https://github.com/myorg/myrepo/issues/123' * * buildIssueUrl({ number: 456, owner: 'other', repo: 'project' }) * // Returns: 'https://github.com/other/project/issues/456' * ``` */ export declare function buildIssueUrl(ref: IIssueRef, defaultOwner?: string, defaultRepo?: string): string; /** * Format issue references for display. * * @param refs - Issue references * @param defaultOwner - Default owner for same-repo references * @param defaultRepo - Default repo for same-repo references * @returns Formatted string like "#123, #456, owner/repo#789" */ export declare function formatIssueRefs(refs: IIssueRef[], defaultOwner?: string, defaultRepo?: string): string; /** * Check if text contains any issue references. * * @param text - Text to check * @returns True if any issue references found */ export declare function hasIssueRefs(text: string): boolean; /** * Check if text contains closing issue references. * * @param text - Text to check * @returns True if any closing references (fixes, closes, resolves) found */ export declare function hasClosingRefs(text: string): boolean; //# sourceMappingURL=issue-refs.d.ts.map