git-limpa-branches
Version:
Utilitário para limpeza segura de branches Git
182 lines (181 loc) • 6.89 kB
TypeScript
/**
* @fileoverview Definições de tipos para o utilitário git-limpa-branches
*/
/**
* Representa as cores disponíveis para saída no console
* @typedef Cores
* @property {string} vermelho - Código ANSI para texto vermelho
* @property {string} verde - Código ANSI para texto verde
* @property {string} amarelo - Código ANSI para texto amarelo
* @property {string} azul - Código ANSI para texto azul
* @property {string} reset - Código ANSI para resetar a formatação
*/
export interface Cores {
readonly vermelho: string;
readonly verde: string;
readonly amarelo: string;
readonly azul: string;
readonly reset: string;
}
/**
* Informações sobre a existência de um branch no repositório local e remoto
* @typedef BranchInfo
* @property {boolean} existeLocal - Indica se o branch existe no repositório local
* @property {boolean} existeRemoto - Indica se o branch existe no repositório remoto
*/
export interface BranchInfo {
existeLocal: boolean;
existeRemoto: boolean;
}
/**
* Argumentos da linha de comando após processamento
* @typedef ArgvOptions
* @property {string} protegidos - Lista de branches protegidos separados por vírgula
* @property {boolean} [help] - Indica se o usuário solicitou ajuda
*/
export interface ArgvOptions {
protegidos: string;
help?: boolean;
[key: string]: unknown;
}
/**
* Resultado da análise de branches do repositório
* @typedef ResultadoAnalise
* @property {string[]} branchesParaExcluir - Branches que podem ser excluídos com segurança
* @property {string[]} branchesComAlteracoes - Branches que têm alterações não mescladas
* @property {Record<string, BranchInfo>} infoRemotoLocal - Informações sobre cada branch
*/
export interface ResultadoAnalise {
branchesParaExcluir: string[];
branchesComAlteracoes: string[];
infoRemotoLocal: Record<string, BranchInfo>;
}
/**
* Executa um comando git e retorna sua saída
* @callback ExecutarGitFn
* @param {string} comando - O comando git a ser executado
* @param {boolean} [silencioso=false] - Se true, não lança erro em caso de falha
* @returns {string} A saída do comando
* @throws {Error} Se o comando falhar e silencioso for false
*/
export type ExecutarGitFn = (comando: string, silencioso?: boolean) => string;
/**
* Verifica se um branch tem alterações não mescladas em relação aos branches protegidos
* @callback TemAlteracoesNaoMescladasFn
* @param {string} branch - O nome do branch a verificar
* @returns {boolean} True se o branch tem alterações não mescladas
*/
export type TemAlteracoesNaoMescladasFn = (branch: string) => boolean;
/**
* Obtém todos os branches remotos
* @callback ObterBranchesRemotosFn
* @returns {string[]} Lista de branches remotos
*/
export type ObterBranchesRemotosFn = () => string[];
/**
* Obtém todos os branches locais
* @callback ObterBranchesLocaisFn
* @returns {string[]} Lista de branches locais
*/
export type ObterBranchesLocaisFn = () => string[];
/**
* Faz uma pergunta ao usuário e retorna a resposta
* @callback FazerPerguntaFn
* @param {string} pergunta - A pergunta a ser feita
* @returns {Promise<string>} A resposta do usuário
*/
export type FazerPerguntaFn = (pergunta: string) => Promise<string>;
/**
* Solicita confirmação do usuário para executar um comando
* @callback ConfirmarEExecutarFn
* @param {string} mensagem - A mensagem explicando o que será feito
* @param {string} comando - O comando a ser executado
* @returns {Promise<boolean>} True se o usuário confirmou, false caso contrário
*/
export type ConfirmarEExecutarFn = (mensagem: string, comando: string) => Promise<boolean>;
/**
* Função principal do programa
* @callback MainFn
* @returns {Promise<void>}
*/
export type MainFn = () => Promise<void>;
/**
* Analisa cada branch e determina quais podem ser excluídos
* @callback AnalisarBranchesGitFn
* @returns {Promise<ResultadoAnalise>} Resultado da análise
*/
export type AnalisarBranchesGitFn = () => Promise<ResultadoAnalise>;
/**
* Realiza a exclusão dos branches identificados como seguros para excluir
* @callback ExcluirBranchesFn
* @param {ResultadoAnalise} resultado - O resultado da análise de branches
* @returns {Promise<boolean>} True se a exclusão foi bem-sucedida para todos os branches
*/
export type ExcluirBranchesFn = (resultado: ResultadoAnalise) => Promise<boolean>;
/**
* Interface que define o contrato para o serviço de limpeza de branches Git
* @interface IGitLimpaBranchesService
*/
export interface IGitLimpaBranchesService {
/**
* Executa um comando git e retorna sua saída
* @param comando - O comando git a ser executado
* @param silencioso - Se true, não lança erro em caso de falha
* @returns A saída do comando
* @throws Error Se o comando falhar e silencioso for false
*/
executarGit: ExecutarGitFn;
/**
* Verifica se um branch tem alterações não mescladas em relação aos branches protegidos
* @param branch - O nome do branch a verificar
* @returns True se o branch tem alterações não mescladas
*/
temAlteracoesNaoMescladas: TemAlteracoesNaoMescladasFn;
/**
* Obtém todos os branches remotos
* @returns Lista de branches remotos
*/
obterBranchesRemotos: ObterBranchesRemotosFn;
/**
* Obtém todos os branches locais
* @returns Lista de branches locais
*/
obterBranchesLocais: ObterBranchesLocaisFn;
/**
* Faz uma pergunta ao usuário e retorna a resposta
* @param pergunta - A pergunta a ser feita
* @returns A resposta do usuário
*/
fazerPergunta: FazerPerguntaFn;
/**
* Solicita confirmação do usuário para executar um comando
* @param mensagem - A mensagem explicando o que será feito
* @param comando - O comando a ser executado
* @returns True se o usuário confirmou, false caso contrário
*/
confirmarEExecutar: ConfirmarEExecutarFn;
/**
* Analisa cada branch e determina quais podem ser excluídos
* @returns Resultado da análise
*/
analisarBranchesGit: AnalisarBranchesGitFn;
/**
* Exibe um resumo dos branches que podem ser excluídos e os que têm alterações
* @param resultado - O resultado da análise de branches
*/
exibirResumo(resultado: ResultadoAnalise): void;
/**
* Realiza a exclusão dos branches identificados como seguros para excluir
* @param resultado - O resultado da análise de branches
* @returns True se a exclusão foi bem-sucedida para todos os branches
*/
excluirBranches: ExcluirBranchesFn;
/**
* Função principal que coordena a execução do utilitário
*/
main(): Promise<void>;
/**
* Retorna as cores usadas pelo serviço para formatação do console
*/
getCores(): Cores;
}