Olá, dev community! 👋
Sou o Arnaldo Tomo, desenvolvedor em Moçambique 🇲🇿, e quero compartilhar com vocês uma biblioteca que desenvolvi para resolver um problema que me incomodava há muito tempo no desenvolvimento full-stack.
😤 A Frustração que me Motivou
Como muitos de vocês, trabalho frequentemente com Laravel no backend e React/Vue no frontend. E sempre me deparava com a mesma situação frustrante:
- Criava um model no Laravel
- Precisava recriar manualmente a interface TypeScript correspondente
- Toda vez que o model mudava, tinha que lembrar de atualizar o TypeScript
- Invariavelmente esquecia, causando bugs em produção
Pensava: "Deve haver uma forma melhor de fazer isso!"
💡 A Ideia
Após mais uma tarde perdida debuggando um erro causado por tipos desatualizados, decidi: vou automatizar isso de uma vez por todas!
A ideia era simples: analisar os models Laravel e gerar automaticamente os tipos TypeScript correspondentes. Mas queria que fosse:
- ✨ Zero configuração - Funcionar imediatamente
- 🔄 Sempre sincronizado - Nunca mais tipos desatualizados
- 🧠 Inteligente - Entender relacionamentos, casts, validações
- ⚡ Rápido - Integração perfeita com o workflow
🛠️ Nasceu o Laravel AutoSchema
Depois de várias semanas de desenvolvimento (e muitas xícaras de café ☕), nasceu o Laravel AutoSchema.
O que a biblioteca faz:
# Instalação simples
composer require arnaldo-tomo/laravel-autoscema
# Um comando e pronto!
php artisan schema:generate
Exemplo do que consegue fazer:
Meu Model Laravel:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = ['name', 'price', 'description'];
protected $casts = [
'price' => 'decimal:2',
'metadata' => 'json',
'status' => ProductStatus::class,
];
public function category()
{
return $this->belongsTo(Category::class);
}
public function reviews()
{
return $this->hasMany(Review::class);
}
}
TypeScript gerado automaticamente:
export interface Product {
id: number;
name: string;
price: number;
description: string;
metadata: Record<string, any> | null;
status: ProductStatus;
created_at: Date;
updated_at: Date;
// Relacionamentos detectados automaticamente!
category?: Category;
reviews?: Review[];
}
export enum ProductStatus {
ACTIVE = 'active',
INACTIVE = 'inactive',
DRAFT = 'draft',
}
🎯 Funcionalidades que Desenvolvi
1. Análise Inteligente de Models
A biblioteca analisa seus models e detecta:
- Campos e tipos automaticamente
- Relacionamentos Eloquent
- Casts personalizados
- Enums PHP 8.1+
2. Geração de Schemas de Validação
A partir dos Form Requests:
class CreateProductRequest extends FormRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
'price' => 'required|numeric|min:0',
];
}
}
Gera automaticamente:
export const createProductSchema = z.object({
name: z.string().max(255),
price: z.number().min(0),
});
3. Cliente API Tipado
Quando habilitado, gera um cliente API completo:
// Uso super simples e tipado!
const products = await productApi.getAll();
const product = await productApi.getById(1);
const newProduct = await productApi.create({
name: 'Novo Produto',
price: 99.99
});
4. File Watcher em Tempo Real
# Fica observando mudanças e regenera automaticamente
php artisan schema:watch
🌟 O que me Orgulha Mais
Zero Configuração
Funciona imediatamente após a instalação. Detecto automaticamente:
- Diretórios de models
- Relacionamentos
- Tipos de dados
- Estrutura do projeto
Compatibilidade Total
Testei extensivamente com:
- ✅ Laravel 9, 10, 11+
- ✅ Inertia.js
- ✅ React, Vue, Angular
- ✅ Diferentes estruturas de projeto
Performance
Otimizei para ser super rápido. Mesmo em projetos com centenas de models, a geração é praticamente instantânea.
📈 Números que me Motivam
Desde o lançamento:
- 🚀 48 instalações (crescendo!)
- ⭐ Feedback positivo da comunidade
- 🐛 Zero issues críticos reportados
- 🌍 Usado em vários países
🔄 Integração com CI/CD
Uma das funcionalidades que mais me orgulho é a integração perfeita com CI/CD:
# GitHub Action que criei
- name: Generate TypeScript types
run: php artisan schema:generate
- name: Commit if changes
run: |
git add resources/js/types/
git commit -m "Auto-update types" || exit 0
🎯 Casos de Uso Reais
Estou vendo a biblioteca sendo usada em:
E-commerce
// Checkout tipado e seguro
const order = await orderApi.create({
products: selectedProducts,
shipping_address: address,
payment_method: 'credit_card'
});
Dashboards
// Forms com validação automática
const ProductForm: React.FC = () => {
const { register, handleSubmit } = useForm<CreateProductInput>({
resolver: zodResolver(createProductSchema) // Schema gerado!
});
// Todo o form é tipado automaticamente
};
APIs REST
Desenvolvedores usando para criar SDKs tipados dos seus APIs Laravel.
🚧 Desafios que Superei
Análise de AST PHP
Tive que mergulhar fundo na análise de código PHP para entender:
- Estrutura dos models
- Relacionamentos dinâmicos
- Casts personalizados
Mapeamento de Tipos
Criar o mapeamento perfeito entre tipos PHP/Laravel e TypeScript foi complexo:
-
Carbon
→Date
-
json
cast →Record<string, any>
- Relacionamentos opcionais →
Type | undefined
Performance com Projetos Grandes
Otimizei algoritmos para funcionar bem mesmo com:
- Centenas de models
- Relacionamentos complexos
- Projetos monolíticos
🤝 Feedback da Comunidade
O que mais me motiva são mensagens como:
"Economizou horas do meu tempo!"
"Finalmente posso refatorar sem medo!"
"Integração perfeita com Inertia.js!"
🔮 Próximos Passos
Estou trabalhando em:
v2.0 Features
- 🔧 Suporte a GraphQL - Gerar tipos para schemas GraphQL
- 🎨 Themes customizáveis - Diferentes formatos de output
- 📱 Plugin para IDEs - Integração com VS Code
- 🌐 API Documentation - Gerar docs automaticamente
Melhorias de Performance
- Cache inteligente
- Geração incremental
- Paralelização
📦 Como Experimentar
# Instalação
composer require arnaldo-tomo/laravel-autoscema
# Inicialização
php artisan schema:init
# Geração
php artisan schema:generate
# Watch mode para desenvolvimento
php artisan schema:watch
🙏 Pedindo Apoio da Comunidade
Como criador indie em Moçambique, cada:
- ⭐ Star no GitHub me motiva muito
- 🐛 Issue reportado me ajuda a melhorar
- 💡 Sugestão me inspira para novas features
- 🗣️ Compartilhamento ajuda outros desenvolvedores
GitHub: https://github.com/arnaldo-tomo/laravel-autoscema
💭 Reflexão Final
Desenvolver o Laravel AutoSchema me ensinou muito sobre:
- Análise estática de código
- Developer Experience (DX)
- Importância da automação
- Como uma ferramenta simples pode impactar produtividade
Mas o mais gratificante é saber que estou resolvendo um problema real que eu e muitos outros desenvolvedores enfrentamos diariamente.
🎉 Vamos Conectar!
Sou apaixonado por desenvolvimento e adoro conversar sobre:
- Full-stack development
- Laravel ecosystem
- TypeScript
- Developer tools
- Open source
Me encontre em:
- 🐙 GitHub: @arnaldo-tomo
- 📧 Email: me@arnaldotomo.dev
- 🌍 Maputo, Moçambique 🇲🇿
Se você testa a biblioteca, me conta sua experiência! Feedback é sempre bem-vindo! 🚀
Top comments (0)