60 lines · 1.5 KB · TypeScript
RawDownload
import type { VcsDriverKind } from "@t3tools/contracts"; export interface VcsTerms {  readonly systemName: string;  readonly repositoryNoun: string;  readonly refNoun: string;  readonly refNounPlural: string;  readonly currentRefFallback: string;} export interface VcsActionPresentation {  readonly supportsGitWorkflowActions: boolean;  readonly unsupportedGitWorkflowDescription: string;} const gitLikeTerms: VcsTerms = {  systemName: "Git",  repositoryNoun: "repository",  refNoun: "branch",  refNounPlural: "branches",  currentRefFallback: "checkout",}; const unknownTerms: VcsTerms = {  systemName: "VCS",  repositoryNoun: "repository",  refNoun: "ref",  refNounPlural: "refs",  currentRefFallback: "checkout",}; export function resolveVcsTerms(kind: VcsDriverKind | null | undefined): VcsTerms {  if (kind === "jj") {    return {      systemName: "JJ",      repositoryNoun: "workspace",      refNoun: "bookmark",      refNounPlural: "bookmarks",      currentRefFallback: "working copy",    };  }   if (kind === "git") {    return gitLikeTerms;  }   return unknownTerms;} export function resolveVcsActionPresentation(  kind: VcsDriverKind | null | undefined,): VcsActionPresentation {  const terms = resolveVcsTerms(kind);  const supportsGitWorkflowActions = kind === undefined || kind === null || kind === "git";   return {    supportsGitWorkflowActions,    unsupportedGitWorkflowDescription: `Git commit, push, and PR actions are not available for this ${terms.systemName} ${terms.repositoryNoun}.`,  };}