import * as Context from "effect/Context"; import type * as Effect from "effect/Effect"; import type { VcsDriverCapabilities, VcsError, VcsInitInput, VcsListRemotesResult, VcsListWorkspaceFilesResult, ReviewDiffPreviewInput, ReviewDiffPreviewResult, VcsRepositoryIdentity, } from "@t3tools/contracts"; import { CheckpointRef } from "@t3tools/contracts"; import * as VcsProcess from "./VcsProcess.ts"; export interface VcsCaptureCheckpointInput { readonly cwd: string; readonly checkpointRef: CheckpointRef; } export interface VcsRestoreCheckpointInput { readonly cwd: string; readonly checkpointRef: CheckpointRef; readonly fallbackToHead?: boolean; } export interface VcsDiffCheckpointsInput { readonly cwd: string; readonly fromCheckpointRef: CheckpointRef; readonly toCheckpointRef: CheckpointRef; readonly fallbackFromToHead?: boolean; readonly ignoreWhitespace: boolean; readonly format?: "patch" | "numstat"; } export interface VcsDeleteCheckpointRefsInput { readonly cwd: string; readonly checkpointRefs: ReadonlyArray; } export interface VcsCheckpointOps { readonly captureCheckpoint: (input: VcsCaptureCheckpointInput) => Effect.Effect; readonly hasCheckpointRef: ( input: Omit, ) => Effect.Effect; readonly restoreCheckpoint: ( input: VcsRestoreCheckpointInput, ) => Effect.Effect; readonly diffCheckpoints: (input: VcsDiffCheckpointsInput) => Effect.Effect; readonly deleteCheckpointRefs: ( input: VcsDeleteCheckpointRefsInput, ) => Effect.Effect; } export class VcsDriver extends Context.Service< VcsDriver, { readonly capabilities: VcsDriverCapabilities; readonly execute: ( input: Omit, ) => Effect.Effect; readonly checkpoints?: VcsCheckpointOps; readonly detectRepository: ( cwd: string, ) => Effect.Effect; readonly isInsideWorkTree: (cwd: string) => Effect.Effect; readonly listWorkspaceFiles: ( cwd: string, ) => Effect.Effect; readonly listRemotes: (cwd: string) => Effect.Effect; readonly filterIgnoredPaths: ( cwd: string, relativePaths: ReadonlyArray, ) => Effect.Effect, VcsError>; readonly initRepository: (input: VcsInitInput) => Effect.Effect; readonly getDiffPreview?: ( input: ReviewDiffPreviewInput, ) => Effect.Effect; } >()("t3/vcs/VcsDriver") {}