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}`; }}
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}`;
}
}