44 lines · 1.5 KB · TypeScript
RawDownload
import {  pullRequestHostOf,  type PullRequestRef,  type RepositoryIdentity,  type SourceControlProviderKind,  type ThreadPullRequestKey,} from "@t3tools/contracts";import { sourceControlRepositorySelector } from "@t3tools/shared/sourceControl";import { normalizeThreadPullRequestKey } from "@t3tools/shared/threadPullRequests"; /** Convert checkout-scoped references to the host-level identity used by linked threads. */export function pullRequestSyncKey(  reference: PullRequestRef,  identity?: RepositoryIdentity | null,): ThreadPullRequestKey | null {  if (identity?.provider === "azure-devops" && !reference.repository.includes("/")) {    if (      reference.repository.toLowerCase() !==        sourceControlRepositorySelector(identity)?.toLowerCase() ||      (reference.host !== undefined &&        reference.host.toLowerCase() !== pullRequestHostOf(identity, "azure-devops"))    )      return null;    const [host, ...repository] = identity.canonicalKey.split("/");    if (!host || repository.length === 0) return null;    return normalizeThreadPullRequestKey({      host,      repository: repository.join("/"),      number: reference.number,    });  }  const host =    reference.host ??    (identity      ? pullRequestHostOf(identity, identity.provider as SourceControlProviderKind)      : undefined);  return host === undefined    ? null    : normalizeThreadPullRequestKey({        host,        repository: reference.repository,        number: reference.number,      });}