* Resolve an issue number that may be a temporary ID and return a concrete owner/repo/number triple. * * @param {any} value - The value to resolve * @param {Map } temporaryIdMap - Normalized map of temporary IDs to {repo, number} * @param {string} defaultOwner - Fallback ow
(value, temporaryIdMap, defaultOwner, defaultRepo)
| 412 | * @returns {{resolved: {owner: string, repo: string, number: number}|null, wasTemporaryId: boolean, errorMessage: string|null}} |
| 413 | */ |
| 414 | function resolveRepoIssueTarget(value, temporaryIdMap, defaultOwner, defaultRepo) { |
| 415 | const result = resolveIssueNumber(value, temporaryIdMap); |
| 416 | if (!result.resolved) { |
| 417 | return { resolved: null, wasTemporaryId: result.wasTemporaryId, errorMessage: result.errorMessage }; |
| 418 | } |
| 419 | |
| 420 | // For non-temporary numeric issue numbers, prefer the caller-provided default repo. |
| 421 | // For temporary IDs, the resolved repo (if present) should win. |
| 422 | const defaultRepoSlug = defaultOwner && defaultRepo ? `${defaultOwner}/${defaultRepo}` : ""; |
| 423 | const repoSlug = result.wasTemporaryId ? result.resolved.repo || defaultRepoSlug : defaultRepoSlug || result.resolved.repo; |
| 424 | const parts = String(repoSlug).split("/"); |
| 425 | if (parts.length !== 2 || !parts[0] || !parts[1]) { |
| 426 | return { |
| 427 | resolved: null, |
| 428 | wasTemporaryId: result.wasTemporaryId, |
| 429 | errorMessage: `Invalid repository slug '${repoSlug}' while resolving issue target (expected 'owner/repo')`, |
| 430 | }; |
| 431 | } |
| 432 | |
| 433 | return { |
| 434 | resolved: { owner: parts[0], repo: parts[1], number: result.resolved.number }, |
| 435 | wasTemporaryId: result.wasTemporaryId, |
| 436 | errorMessage: null, |
| 437 | }; |
| 438 | } |
| 439 | |
| 440 | /** |
| 441 | * Resolve a safe-output issue/PR target number from a message. |
no test coverage detected