1.0.6 • Published 4 months ago

gradle-manipulator v1.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

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ós
  • block: Blocos como android {}, dependencies {}, etc.
  • property: Propriedades como versionCode 1 ou implementation "library:version"
  • comment: Comentários no código
  • raw: Linhas em branco ou outros conteúdos não categorizados

🧩 Métodos Principais

  • findBlocks(containing: string): Encontra blocos que contenham o texto especificado
  • findProperties(regex: RegExp): Encontra propriedades que correspondam à expressão regular
  • addProperty(blockName: string, property: string): Adiciona uma propriedade a um bloco
  • modifyProperty(blockName: string, propertyPattern: RegExp, newValue: string): Modifica uma propriedade existente
  • addBlock(parentBlockName: string, blockDefinition: string): Adiciona um novo bloco a um bloco pai
  • blockExists(blockName: string): Verifica se um bloco existe
  • getBlockProxy(blockName: string): Retorna um proxy para manipulação intuitiva de um bloco
  • updateVersion(): Incrementa automaticamente o número da versão em defaultConfig

💡 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.

1.0.6

4 months ago

1.0.5

4 months ago

1.0.4

4 months ago

1.0.3

4 months ago

1.0.2

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago