import { invoke } from "@tauri-apps/api/core"; import type { CommitAiStatus, ConflictFile, GitBranch, GitCommit, GitCommitComparison, GitRepositoryFile, GitSearchHit, GitStatus, PatchApplyAction, RepositoryBundle, StoredCredential, } from "./types"; export function openRepository(path: string): Promise { return invoke("open_repository", { path }); } export function openRepoInExplorer(path: string): Promise { return invoke("open_repo_in_explorer", { path }); } export function openRepositoryFile(path: string, file: string): Promise { return invoke("open_repository_file", { path, file }); } export function openRepositoryBundle(path: string, commitLimit = 100): Promise { return invoke("open_repository_bundle", { path, commitLimit }); } export function getStatus(path: string): Promise { return invoke("get_status", { path }); } export function listBranches(path: string): Promise { return invoke("list_branches", { path }); } export function checkoutBranch(path: string, branch: string): Promise { return invoke("checkout_branch", { path, branch }); } export function createBranch( path: string, branch: string, startPoint?: string, ): Promise { return invoke("create_branch", { path, branch, startPoint: startPoint ?? null }); } export function renameBranch( path: string, oldBranch: string, newBranch: string, ): Promise { return invoke("rename_branch", { path, oldBranch, newBranch }); } export function deleteBranch(path: string, branch: string): Promise { return invoke("delete_branch", { path, branch }); } export function stageFiles(path: string, files: string[]): Promise { return invoke("stage_files", { path, files }); } export function unstageFiles(path: string, files: string[]): Promise { return invoke("unstage_files", { path, files }); } export function restoreFiles( path: string, files: string[], staged: boolean, ): Promise { return invoke("restore_files", { path, files, staged }); } export function getFilePatch(path: string, file: string, staged: boolean): Promise { return invoke("get_file_patch", { path, file, staged }); } export function applyFilePatch( path: string, file: string, patch: string, action: PatchApplyAction, ): Promise { return invoke("apply_file_patch", { path, file, patch, action }); } export function commit(path: string, message: string): Promise { return invoke("commit", { path, message }); } export function commitAiStatus(): Promise { return invoke("commit_ai_status"); } export function commitAiGenerate(path: string, notes?: string): Promise { return invoke("commit_ai_generate", { path, notes }); } export function pull(path: string, username?: string, password?: string): Promise { return invoke("pull", { path, username: username ?? null, password: password ?? null }); } export function push(path: string, username?: string, password?: string): Promise { return invoke("push", { path, username: username ?? null, password: password ?? null }); } export function getRemoteUrl(path: string): Promise { return invoke("get_remote_url", { path }); } export function credLoad(key: string): Promise { return invoke("cred_load", { key }); } export function credSave( key: string, username: string, password: string, expiresAt: string | null, ): Promise { return invoke("cred_save", { key, username, password, expiresAt }); } export function credDelete(key: string): Promise { return invoke("cred_delete", { key }); } export function listCommits(path: string, limit = 100): Promise { return invoke("list_commits", { path, limit }); } export function restoreToCommit(path: string, commit: string): Promise { return invoke("restore_to_commit", { path, commit }); } export function restoreFileFromCommit( path: string, commit: string, file: string, ): Promise { return invoke("restore_file_from_commit", { path, commit, file }); } export function mergeBranch(path: string, branch: string): Promise { return invoke("merge_branch", { path, branch }); } export function listRepositoryFiles(path: string): Promise { return invoke("list_repository_files", { path }); } export function listFileHistory( path: string, file: string, limit = 100, requestId?: string, ): Promise { return invoke("list_file_history", { path, file, limit, requestId: requestId ?? null }); } export function cancelFileHistory(requestId: string): Promise { return invoke("cancel_file_history", { requestId }); } export function compareCommits( path: string, from: string, to: string, ): Promise { return invoke("compare_commits", { path, from, to }); } export function diffFileAgainstWorkingTree( path: string, commit: string, file: string, ): Promise { return invoke("diff_file_against_working_tree", { path, commit, file }); } export function compareFileToHead( path: string, commit: string, file: string, ): Promise { return invoke("compare_file_to_head", { path, commit, file }); } export function compareFileToParent( path: string, commit: string, file: string, oldFile: string | null = null, ): Promise { return invoke("compare_file_to_parent", { path, commit, file, oldFile }); } export function searchCodeIntroductions( path: string, query: string, caseSensitive = false, limit = 250, searchId?: string, ): Promise { return invoke("search_code_introductions", { path, query, caseSensitive, limit, searchId: searchId ?? null, }); } export function cancelCodeSearch(searchId: string): Promise { return invoke("cancel_code_search", { searchId }); } export function readConflict(path: string, file: string): Promise { return invoke("read_conflict", { path, file }); } export function resolveConflict( path: string, file: string, content: string, ): Promise { return invoke("resolve_conflict", { path, file, content }); } export function resolveConflictSide( path: string, file: string, side: "ours" | "theirs", ): Promise { return invoke("resolve_conflict_side", { path, file, side }); }