Tab Switch é uma extensão de navegador que permite a rotação automática entre abas abertas, fechando outras abas não configuradas. Ideal para apresentações, monitoramento de dashboards e outras situações onde a rotação de abas é necessária.
- Configuração de tempo de rotação entre abas
- Configuração de abas a serem exibidas
- Importação e exportação de configurações de abas
- React - Biblioteca JavaScript para criar interfaces de usuário
- TypeScript - Superset JavaScript
- Vite - Build tool para aplicações web modernas
- Tailwind CSS - Framework CSS utilitário de baixo nível para construir designs personalizados
- Lucide Icons - Conjunto de ícones para projetos web
- Biome - Linter e formatador de código rápido e unificado
- Lefthook - Git hooks manager para garantir qualidade de código
- Clone o repositório:
git clone git@github.com:RanielliMontagna/tab-switch.git cd tab-switch - Instale as dependências:
pnpm install
- Compile o projeto:
pnpm build
- (Opcional) Instale os git hooks para garantir qualidade de código:
Isso configurará o Lefthook para executar verificações automáticas antes de commits e pushes.
pnpm prepare
- Adicione a extensão no Chrome:
- Abra o Chrome e vá para
chrome://extensions/. - Ative o "Modo do desenvolvedor" no canto superior direito.
- Clique em "Carregar sem compactação" e selecione a pasta
buildgerada pelo comando de build.
- Abra o Chrome e vá para
Agora a extensão está instalada e pronta para uso no Chrome.
pnpm dev- Inicia o servidor de desenvolvimentopnpm build- Compila o projeto para produçãopnpm check- Executa verificação de lint e formatação (Biome)pnpm check:fix- Executa verificação e corrige automaticamentepnpm lint- Executa apenas o linterpnpm format- Formata o códigopnpm test- Executa testes unitáriospnpm test:coverage- Executa testes com relatório de coberturapnpm validate:translations- Valida se todas as traduções estão completaspnpm validate:manifest- Valida o manifest.json antes do build
O projeto inclui várias medidas de segurança:
- Validação de URLs: URLs são verificadas antes da criação de tabs para detectar links suspeitos
- Rate Limiting: Operações sensíveis (criação de tabs, importação) têm limites de taxa para prevenir abuso
- Verificação de Integridade: Dados importados são validados com checksums
- Sanitização: Todos os inputs do usuário são sanitizados
Para habilitar logs detalhados em produção, defina a variável de ambiente:
VITE_DEBUG=true pnpm buildOu adicione ao arquivo .env:
VITE_DEBUG=true
tab-switch/
├── src/
│ ├── @types/ # Definições de tipos TypeScript
│ │ ├── chrome.d.ts # Tipos do Chrome Extension API
│ │ └── messages.ts # Tipos de mensagens entre popup e background
│ ├── assets/ # Assets estáticos (imagens, SVGs)
│ ├── background/ # Service worker (background script)
│ │ └── index.ts
│ ├── components/ # Componentes React reutilizáveis
│ │ ├── ui/ # Componentes de UI base (Button, Input, etc.)
│ │ └── ErrorBoundary.tsx
│ ├── constants/ # Constantes da aplicação
│ ├── containers/ # Containers/páginas principais
│ │ └── home/ # Container principal da extensão
│ ├── hooks/ # Custom hooks React
│ ├── libs/ # Bibliotecas e configurações
│ │ ├── i18n.ts # Configuração de internacionalização
│ │ ├── migrations.ts # Migrações de dados
│ │ ├── storage.ts # Utilitários de armazenamento
│ │ ├── tab-management.ts
│ │ └── tab-rotation.ts
│ ├── services/ # Serviços e scripts de inicialização
│ │ └── theme-init.ts
│ ├── styles/ # Estilos globais
│ ├── utils/ # Funções utilitárias
│ │ ├── chrome-api.ts
│ │ ├── cn/ # Utility para classes CSS
│ │ └── url.ts
│ ├── app.tsx # Componente raiz da aplicação
│ └── main.tsx # Ponto de entrada da aplicação
├── public/ # Arquivos públicos
│ ├── locales/ # Arquivos de tradução (i18n)
│ └── manifest.json # Manifest da extensão Chrome
├── build/ # Build de produção (gerado)
└── package.json
Contribuições são bem-vindas! Siga estes passos para contribuir:
# Fork o repositório no GitHub, depois:
git clone git@github.com:SEU_USUARIO/tab-switch.git
cd tab-switchpnpm installpnpm prepareIsso instala o Lefthook que garante qualidade de código antes de commits.
git checkout -b feature/minha-feature
# ou
git checkout -b fix/minha-correcao- Siga os padrões de código do projeto (Biome será executado automaticamente)
- Adicione testes se possível
- Atualize a documentação se necessário
- Certifique-se de que o build passa:
pnpm build
O Lefthook executará automaticamente:
- Verificação de lint e formatação (Biome)
- Verificação de tipos TypeScript
git add .
git commit -m "feat: adiciona nova funcionalidade"
# ou
git commit -m "fix: corrige bug específico"git push origin feature/minha-featureDepois, crie um Pull Request no GitHub.
- TypeScript: Use tipos explícitos, evite
any - Biome: O projeto usa Biome para lint e formatação
- Commits: Siga o padrão Conventional Commits
feat:para novas funcionalidadesfix:para correções de bugsdocs:para documentaçãostyle:para formataçãorefactor:para refatoraçõestest:para testeschore:para tarefas de manutenção
# Limpe o cache e reconstrua
rm -rf node_modules build
pnpm install
pnpm build- Verifique se o build foi executado:
pnpm build - Certifique-se de estar carregando a pasta
build, nãosrc - Verifique o console do Chrome (
chrome://extensions/→ Detalhes → Erros) - Verifique o console do background script (Service Worker)
Se a extensão não conseguir criar/gerenciar abas:
- Verifique o
manifest.json- deve ter a permissãotabs - Recarregue a extensão no Chrome
- Verifique se não há outras extensões conflitantes
Se as traduções não aparecem:
- Verifique se os arquivos em
public/locales/estão corretos - Verifique o console do navegador para erros de carregamento
- Certifique-se de que o build copiou os arquivos de locale para
build/locales/
Se houver problemas com armazenamento:
- Abra o DevTools da extensão
- Vá para Application → Storage → Chrome Extension Storage
- Verifique se há dados corrompidos
- Limpe o storage se necessário:
chrome.storage.local.clear()
- Abra a extensão (clique no ícone)
- Clique com botão direito no popup → "Inspecionar"
- Use o DevTools normalmente
- Vá para
chrome://extensions/ - Encontre a extensão
- Clique em "Service Worker" (ou "Background page")
- Isso abrirá o DevTools do service worker
- O projeto usa
console.logeconsole.errorpara logging - Verifique o console do background script para logs de rotação
- Verifique o console do popup para logs da UI
pnpm devIsso inicia o servidor Vite em modo watch. Para ver mudanças na extensão:
- Execute
pnpm buildapós fazer alterações - Recarregue a extensão no Chrome (
chrome://extensions/→ ícone de recarregar)
O Vite não suporta hot reload direto para extensões Chrome. Você precisa:
- Fazer alterações no código
- Executar
pnpm build - Recarregar a extensão manualmente
pnpm tsc --noEmitpnpm checkpnpm check:fixEste projeto usa Semantic Versioning e release-please para gerenciamento automático de versões.
-
Commits convencionais: Os commits devem seguir o padrão Conventional Commits:
feat:- Nova funcionalidade (incrementa versão minor)fix:- Correção de bug (incrementa versão patch)feat!:oufix!:- Breaking change (incrementa versão major)docs:,style:,refactor:,perf:,test:,chore:- Não incrementam versão
-
Release automático: O GitHub Actions executa o release-please que:
- Analisa os commits desde a última release
- Cria um Pull Request com atualizações de versão e CHANGELOG
- Quando o PR é mergeado, cria automaticamente uma release e tag
- Faça commits seguindo o padrão Conventional Commits
- O release-please criará automaticamente um PR com as mudanças
- Revise e merge o PR
- A release será criada automaticamente no GitHub
O arquivo CHANGELOG.md é atualizado automaticamente pelo release-please baseado nos commits.
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
