1.0.6 • Published 4 months ago
gradle-manipulator v1.0.6
GradleScript Parser
Um analisador leve e flexível para arquivos de build Gradle, escrito em TypeScript puro, que permite ler, manipular e escrever scripts Gradle programaticamente sem precisar executar o Gradle.
🌟 Recursos
- Analisa arquivos build.gradle em uma AST (Árvore de Sintaxe Abstrata) intuitiva
- Encontra e manipula blocos e propriedades usando métodos de API simples
- Acesso a propriedades via objetos proxy para manipulação intuitiva
- Tratamento automático de indentação para manter o formato do código
- Funciona em qualquer ambiente JavaScript/TypeScript (Node.js, navegadores, etc.)
📋 Instalação
npm install gradle-manipulator
# ou
yarn add gradle-manipulator
🚀 Como Usar
Exemplo Básico
import { GradleParser } from 'gradle-manipulator';
import * as fs from 'fs';
// Carregar um arquivo build.gradle
const conteudo = fs.readFileSync('app/build.gradle', 'utf-8');
const parser = new GradleParser(conteudo);
// Verificar se um bloco existe
if (parser.blockExists('android')) {
console.log('Configuração Android encontrada!');
}
// Encontrar blocos específicos
const dependencyBlocks = parser.findBlocks('dependencies');
console.log(`Encontrados ${dependencyBlocks.length} blocos de dependências`);
// Adicionar uma nova propriedade
parser.addProperty('android', 'compileSdkVersion 33');
// Modificar uma propriedade existente
parser.modifyProperty('defaultConfig', /versionCode/, 'versionCode 42');
// Salvar as alterações
fs.writeFileSync('app/build.gradle', parser.toString(), 'utf-8');
Usando Proxies para Manipulação Intuitiva
import { GradleParser } from 'gradle-manipulator';
const conteudo = `
android {
defaultConfig {
applicationId "com.exemplo.app"
versionCode 10
versionName "1.0.0"
}
}
`;
const parser = new GradleParser(conteudo);
// Acessar e manipular propriedades como um objeto JavaScript
const defaultConfig = parser.getBlockProxy('defaultConfig');
// Leitura de propriedades
console.log(defaultConfig['versionCode']); // Saída: 10
console.log(defaultConfig['applicationId']); // Saída: "com.exemplo.app"
// Atualização de propriedades
defaultConfig['versionCode'] = '11';
defaultConfig['versionName'] = '"1.0.1"';
// Adicionar uma nova propriedade
defaultConfig['minSdkVersion'] = '23';
console.log(parser.toString());
Incrementando a Versão Automaticamente
const parser = new GradleParser(conteudo);
if (parser.updateVersion()) {
console.log('Versão incrementada com sucesso!');
}
📊 Estrutura AST
O parser gera uma AST com os seguintes tipos de nós:
root
: O nó raiz que contém todos os outros nósblock
: Blocos comoandroid {}
,dependencies {}
, etc.property
: Propriedades comoversionCode 1
ouimplementation "library:version"
comment
: Comentários no códigoraw
: Linhas em branco ou outros conteúdos não categorizados
🧩 Métodos Principais
findBlocks(containing: string)
: Encontra blocos que contenham o texto especificadofindProperties(regex: RegExp)
: Encontra propriedades que correspondam à expressão regularaddProperty(blockName: string, property: string)
: Adiciona uma propriedade a um blocomodifyProperty(blockName: string, propertyPattern: RegExp, newValue: string)
: Modifica uma propriedade existenteaddBlock(parentBlockName: string, blockDefinition: string)
: Adiciona um novo bloco a um bloco paiblockExists(blockName: string)
: Verifica se um bloco existegetBlockProxy(blockName: string)
: Retorna um proxy para manipulação intuitiva de um blocoupdateVersion()
: Incrementa automaticamente o número da versão emdefaultConfig
💡 Casos de Uso
- Scripts de automação de build
- Ferramentas de CI/CD para incremento automático de versão
- Geração de configurações Gradle dinamicamente
- Análise estática de arquivos de build
- Migração automatizada entre versões do Gradle
📄 Licença
MIT
Desenvolvido com ❤️ para desenvolvedores que desejam automatizar tarefas repetitivas de configuração de build.