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, });}
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,
});
}