Uma ferramenta de engenharia de software robusta para geração automatizada de manifestos PWA, Service Workers resilientes e processamento de assets (ícones e screenshots) diretamente no navegador.
Este projeto foi construído seguindo princípios de Clean Architecture, DDD (Domain-Driven Design) e Object Calisthenics, garantindo um código altamente testável e de fácil manutenção.
- Geração de Manifest: Criação completa do
manifest.jsonseguindo os padrões W3C. - Service Worker Inteligente: Estratégia de cache offline com proteção contra consumo de streams e suporte a esquemas não-HTTP.
- Processamento de Imagem: Algoritmo de Crop-to-Fill nativo (Canvas API) para evitar distorções em ícones e screenshots.
- SEO Otimizado: Geração de
index.htmlsemântico com tags<main>e metadados de acessibilidade. - Exportação ZIP: Empacotamento instantâneo de todos os assets e arquivos de configuração.
O projeto foi estruturado para separar as preocupações de UI da lógica de negócio:
/src/core/services: Camada de domínio contendo os geradores e processadores (Pure TS)./src/composables: Gestão de estado reativo e lógica de aplicação./src/components: Componentes de interface modulares e reutilizáveis.- Modo Estrito (TypeScript): 100% de cobertura de tipos, garantindo segurança em tempo de compilação.
O projeto possui uma suite de testes abrangente utilizando Vitest e JSDOM, cobrindo desde cálculos matemáticos de imagem até a reatividade da interface.
- Unitários: Validação dos serviços de geração (HTML, SW, ZIP).
- Mocking de DOM: Simulação de APIs de navegador (Canvas, Blobs, Anchors) para testes de ambiente Node.
- Integração: Validação da reatividade entre
useManifeste componentes Vue.
Para rodar os testes:
npm run test- Framework: Vue 3 (Composition API)
- Linguagem: TypeScript (Strict Mode)
- Build Tool: Vite
- Estilização: Tailwind CSS
- Testes: Vitest & Vue Test Utils
- Manipulação de Arquivos: JSZip
- Clone o repositório:
git clone https://github.com/luizhanauer/pwa-builder.git
cd pwa-builder- Instale as dependências:
npm install- Inicie o servidor de desenvolvimento:
npm run dev- Gere a versão de produção:
npm run buildContribuições são bem-vindas! Se você encontrar algum problema ou tiver sugestões para melhorar a aplicação, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Se você gostou do meu trabalho e quer me agradecer, você pode me pagar um café :)
Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter mais informações.
