111 lines · 3.9 KB · TypeScript
RawDownload
import { Schema } from "effect";import { PositiveInt, TrimmedNonEmptyString } from "./baseSchemas.ts";import { VcsDriverKind } from "./vcs.ts"; export const SourceControlProviderKind = Schema.Literals([  "github",  "gitlab",  "azure-devops",  "bitbucket",  "unknown",]);export type SourceControlProviderKind = typeof SourceControlProviderKind.Type; export const SourceControlProviderInfo = Schema.Struct({  kind: SourceControlProviderKind,  name: TrimmedNonEmptyString,  baseUrl: Schema.String,});export type SourceControlProviderInfo = typeof SourceControlProviderInfo.Type; export const ChangeRequestState = Schema.Literals(["open", "closed", "merged"]);export type ChangeRequestState = typeof ChangeRequestState.Type; export const ChangeRequest = Schema.Struct({  provider: SourceControlProviderKind,  number: PositiveInt,  title: TrimmedNonEmptyString,  url: Schema.String,  baseRefName: TrimmedNonEmptyString,  headRefName: TrimmedNonEmptyString,  state: ChangeRequestState,  updatedAt: Schema.Option(Schema.DateTimeUtc),  isCrossRepository: Schema.optional(Schema.Boolean),  headRepositoryNameWithOwner: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),  headRepositoryOwnerLogin: Schema.optional(Schema.NullOr(TrimmedNonEmptyString)),});export type ChangeRequest = typeof ChangeRequest.Type; export const SourceControlRepositoryCloneUrls = Schema.Struct({  nameWithOwner: TrimmedNonEmptyString,  url: TrimmedNonEmptyString,  sshUrl: TrimmedNonEmptyString,});export type SourceControlRepositoryCloneUrls = typeof SourceControlRepositoryCloneUrls.Type; export const SourceControlDiscoveryStatus = Schema.Literals(["available", "missing"]);export type SourceControlDiscoveryStatus = typeof SourceControlDiscoveryStatus.Type; export const SourceControlProviderAuthStatus = Schema.Literals([  "authenticated",  "unauthenticated",  "unknown",]);export type SourceControlProviderAuthStatus = typeof SourceControlProviderAuthStatus.Type; export const SourceControlProviderAuth = Schema.Struct({  status: SourceControlProviderAuthStatus,  account: Schema.Option(TrimmedNonEmptyString),  host: Schema.Option(TrimmedNonEmptyString),  detail: Schema.Option(TrimmedNonEmptyString),});export type SourceControlProviderAuth = typeof SourceControlProviderAuth.Type; const SourceControlDiscoveryItemFields = {  label: TrimmedNonEmptyString,  executable: TrimmedNonEmptyString,  implemented: Schema.Boolean,  status: SourceControlDiscoveryStatus,  version: Schema.Option(TrimmedNonEmptyString),  installHint: TrimmedNonEmptyString,  detail: Schema.Option(TrimmedNonEmptyString),} as const; export const SourceControlDiscoveryItem = Schema.Struct({  kind: Schema.String,  ...SourceControlDiscoveryItemFields,});export type SourceControlDiscoveryItem = typeof SourceControlDiscoveryItem.Type; export const VcsDiscoveryItem = Schema.Struct({  kind: VcsDriverKind,  ...SourceControlDiscoveryItemFields,});export type VcsDiscoveryItem = typeof VcsDiscoveryItem.Type; export const SourceControlProviderDiscoveryItem = Schema.Struct({  kind: SourceControlProviderKind,  ...SourceControlDiscoveryItemFields,  auth: SourceControlProviderAuth,});export type SourceControlProviderDiscoveryItem = typeof SourceControlProviderDiscoveryItem.Type; export const SourceControlDiscoveryResult = Schema.Struct({  versionControlSystems: Schema.Array(VcsDiscoveryItem),  sourceControlProviders: Schema.Array(SourceControlProviderDiscoveryItem),});export type SourceControlDiscoveryResult = typeof SourceControlDiscoveryResult.Type; export class SourceControlProviderError extends Schema.TaggedErrorClass<SourceControlProviderError>()(  "SourceControlProviderError",  {    provider: SourceControlProviderKind,    operation: Schema.String,    detail: Schema.String,    cause: Schema.optional(Schema.Defect),  },) {  override get message(): string {    return `Source control provider ${this.provider} failed in ${this.operation}: ${this.detail}`;  }}