@builder.io/dev-tools
Version:
Builder.io Visual CMS Devtools
95 lines (94 loc) • 4.24 kB
TypeScript
import type { DevToolsSys } from "@builder.io/dev-tools/core";
import { type FusionConfig, type WorkspaceFolder, type InitState, type InitStateStep, type InitStatusLog } from "$/ai-utils";
type ValidatedWorkspaceFolder = WorkspaceFolder & Required<Pick<WorkspaceFolder, "name" | "path">>;
type WorkspaceFolderWithRepoInfo = ValidatedWorkspaceFolder & Required<Pick<WorkspaceFolder, "repoName" | "repoUrl">>;
import type { Credentials } from "../credentials";
import { type GitBackupDownloadResult } from "../backup";
export interface InitConfig {
fusionConfig: FusionConfig;
credentials: Credentials;
sys: DevToolsSys;
debug?: boolean;
sentryTags?: Record<string, string>;
}
export interface InitStatus {
message: string;
error?: string;
}
export declare class InitStateMachine {
logIdCounter: number;
initStatusLogs: InitStatusLog[];
sys: DevToolsSys;
config: InitConfig;
/**
* @deprecated use addInitLog instead. Do not use this directly.
*/
debug: boolean;
initState: InitState;
constructor(config: InitConfig);
checkout(branchName: string, ref: string, repoPath: string): Promise<boolean>;
execAsync(exec: string, args: string[], cwd?: string, retry?: number): Promise<string>;
git(args: string[], cwd?: string, retry?: number, timeout?: number): Promise<string>;
performBackup({ sys, credentials, fusionConfig, volumePath, repositories, isConnectedToProvider, forcedFullBackup, }: {
sys: DevToolsSys;
credentials: Credentials;
fusionConfig: FusionConfig;
volumePath: string;
repositories: ValidatedWorkspaceFolder[];
isConnectedToProvider: boolean;
forcedFullBackup: boolean;
}): Promise<void>;
performRegularBackup(args: Omit<Parameters<typeof this.performBackup>[0], "isConnectedToProvider" | "forcedFullBackup">): Promise<void>;
performOfflineBackup(args: Omit<Parameters<typeof this.performBackup>[0], "isConnectedToProvider" | "forcedFullBackup">): Promise<void>;
performForcedFullBackup(args: Omit<Parameters<typeof this.performBackup>[0], "isConnectedToProvider" | "forcedFullBackup">): Promise<void>;
init(): Promise<boolean>;
addInitLog(type: "status" | "log" | "error" | "complete", message: string, options?: {
step?: InitStateStep;
error?: string;
success?: boolean;
}): void;
clearInitLogs(): void;
hasFilesButNoGit(repoPath: string): Promise<boolean>;
step1CheckDirectories(volumePath: string, repositories: ValidatedWorkspaceFolder[]): Promise<void>;
step2ConfigureGitRepositories(volumePath: string, repositories: ValidatedWorkspaceFolder[]): Promise<void>;
step3ConfigureGitUser(volumePath: string, repositories: ValidatedWorkspaceFolder[]): Promise<void>;
step4CollectRepoInfo(config: InitConfig, volumePath: string, repositories: ValidatedWorkspaceFolder[]): Promise<void>;
private isGitConfigured;
private getGitRemoteUrl;
private sanitizeGitRemoteUrl;
/**
* Check if the repository URL is from a standard git hosting provider
*/
private isStandardGitHost;
/**
* Check if the repository host is reachable via network
* Performs DNS resolution and TCP connection check
*/
private checkHostConnectivity;
private checkConnectivityDirect;
private checkConnectivityViaProxy;
private cleanupLockFiles;
validateGitRepo(repoPath: string): Promise<void>;
/**
* If a backup is available, perform a backup recovery (and throw if it fails and cannot be recovered from).
* If no backup is available, do nothing.
*/
private restoreFromPartialBackup;
private initializeGitRepo;
private refreshRepoConfig;
runInitializationCommand({ repo, tempCloningDir, repoPath, initCommand, }: {
repo: ValidatedWorkspaceFolder;
tempCloningDir: string;
repoPath: string;
initCommand: string;
}): Promise<{
outcome: boolean;
error?: Error;
}>;
cloneRepository({ repo, repoPath, backupResult, }: {
repo: WorkspaceFolderWithRepoInfo;
repoPath: string;
backupResult: GitBackupDownloadResult | undefined;
}): Promise<boolean>;
}
export {};