import { Effect } from "effect"
import { runtime } from "@/effect/runtime"
import { GitEffect } from "./effect"
function runPromise(f: (service: GitEffect.Interface) => Effect.Effect): Promise {
return runtime.runPromise(GitEffect.Service.use(f))
}
export namespace Git {
export type Kind = GitEffect.Kind
export type Base = GitEffect.Base
export type Item = GitEffect.Item
export type Stat = GitEffect.Stat
export type Result = GitEffect.Result
export type Options = GitEffect.Options
export function run(args: string[], opts: Options) {
return runPromise((git) => git.run(args, opts))
}
export function text(args: string[], opts: Options) {
return runPromise((git) => git.text(args, opts))
}
export function lines(args: string[], opts: Options) {
return runPromise((git) => git.lines(args, opts))
}
export function branch(cwd: string) {
return runPromise((git) => git.branch(cwd))
}
export function prefix(cwd: string) {
return runPromise((git) => git.prefix(cwd))
}
export function defaultBranch(cwd: string) {
return runPromise((git) => git.defaultBranch(cwd))
}
export function hasHead(cwd: string) {
return runPromise((git) => git.hasHead(cwd))
}
export function mergeBase(cwd: string, base: string, head?: string) {
return runPromise((git) => git.mergeBase(cwd, base, head))
}
export function show(cwd: string, ref: string, file: string, prefix?: string) {
return runPromise((git) => git.show(cwd, ref, file, prefix))
}
export function status(cwd: string) {
return runPromise((git) => git.status(cwd))
}
export function diff(cwd: string, ref: string) {
return runPromise((git) => git.diff(cwd, ref))
}
export function stats(cwd: string, ref: string) {
return runPromise((git) => git.stats(cwd, ref))
}
}