Make your repository fly - A TypeScript MongoDB/Mongoose utility library that provides a clean, standardized interface for common database operations.
Turbinate is a lightweight TypeScript library built on top of Mongoose that simplifies MongoDB operations by providing a standardized interface for CRUD operations. It's designed to make your database interactions more consistent and reduce boilerplate code in your Node.js applications.
- ✅ TypeScript First: Full TypeScript support with strong typing
- ✅ Mongoose Integration: Built on top of the popular Mongoose ODM
- ✅ CRUD Operations: Standardized Create, Read, Update, Delete operations
- ✅ Flexible Filtering: Support for MongoDB query filters
- ✅ Parent Model Support: Handle model inheritance scenarios
- ✅ ESM & CJS: Dual package support for modern and legacy projects
- ✅ Lightweight: Minimal dependencies and overhead
npm install @dixavier27/turbinate
yarn add @dixavier27/turbinate
import mongoose from 'mongoose';
import Turbinate from '@dixavier27/turbinate';
// Define your schema
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
// Create your model
const UserModel = mongoose.model('User', userSchema);
// Initialize Turbinate
const userRepository = new Turbinate(UserModel);
// Use the repository
async function example() {
// Create a new user
const newUser = await userRepository.create({
name: 'John Doe',
email: '[email protected]',
age: 30
});
// Read a user
const user = await userRepository.read({ email: '[email protected]' });
// Update a user
const updatedUser = await userRepository.update(
{ email: '[email protected]' },
{ age: 31 }
);
// Search users
const users = await userRepository.search({ age: { $gte: 25 } });
// Remove a user
await userRepository.remove(user._id);
}
new Turbinate<T>(model: Model<T>, parentModel?: Model<T>)
model
: The primary Mongoose modelparentModel
(optional): Parent model for inheritance scenarios
Creates a new document in the database.
const user = await repository.create({
name: 'Jane Doe',
email: '[email protected]'
});
Updates a document that matches the filter.
const updatedUser = await repository.update(
{ email: '[email protected]' },
{ name: 'Jane Smith' }
);
Replaces an entire document by ID.
const replacedUser = await repository.replace(userId, {
name: 'New Name',
email: '[email protected]',
age: 25
});
Finds a single document that matches the filters.
const user = await repository.read({ email: '[email protected]' });
Finds multiple documents that match the filters.
const users = await repository.search({ age: { $gte: 18 } });
Removes a document by ID.
const deletedUser = await repository.remove(userId);
const BaseModel = mongoose.model('Base', baseSchema);
const ChildModel = mongoose.model('Child', childSchema);
const repository = new Turbinate(ChildModel, BaseModel);
// Read and search operations will use the parent model
const result = await repository.read({ someField: 'value' });
Turbinate is built with TypeScript and provides full type safety:
interface User {
name: string;
email: string;
age: number;
}
const UserModel = mongoose.model<User>('User', userSchema);
const repository = new Turbinate<User>(UserModel);
// All operations are now type-safe
const user = await repository.create({
name: 'John',
email: '[email protected]',
age: 30
});
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Affonso Xavier - @dixavier27
Turbinate é uma biblioteca TypeScript leve construída sobre o Mongoose que simplifica operações do MongoDB fornecendo uma interface padronizada para operações CRUD. Foi projetada para tornar suas interações com banco de dados mais consistentes e reduzir código repetitivo em suas aplicações Node.js.
- ✅ TypeScript em Primeiro Lugar: Suporte completo ao TypeScript com tipagem forte
- ✅ Integração com Mongoose: Construída sobre o popular ODM Mongoose
- ✅ Operações CRUD: Operações padronizadas de Criar, Ler, Atualizar, Deletar
- ✅ Filtragem Flexível: Suporte para filtros de consulta do MongoDB
- ✅ Suporte a Modelo Pai: Trata cenários de herança de modelos
- ✅ ESM & CJS: Suporte duplo para projetos modernos e legados
- ✅ Leve: Dependências e overhead mínimos
npm install @dixavier27/turbinate
yarn add @dixavier27/turbinate
import mongoose from 'mongoose';
import Turbinate from '@dixavier27/turbinate';
// Defina seu schema
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
});
// Crie seu modelo
const UserModel = mongoose.model('User', userSchema);
// Inicialize o Turbinate
const userRepository = new Turbinate(UserModel);
// Use o repositório
async function exemplo() {
// Criar um novo usuário
const novoUsuario = await userRepository.create({
name: 'João Silva',
email: '[email protected]',
age: 30
});
// Ler um usuário
const usuario = await userRepository.read({ email: '[email protected]' });
// Atualizar um usuário
const usuarioAtualizado = await userRepository.update(
{ email: '[email protected]' },
{ age: 31 }
);
// Buscar usuários
const usuarios = await userRepository.search({ age: { $gte: 25 } });
// Remover um usuário
await userRepository.remove(usuario._id);
}
new Turbinate<T>(model: Model<T>, parentModel?: Model<T>)
model
: O modelo Mongoose principalparentModel
(opcional): Modelo pai para cenários de herança
Cria um novo documento no banco de dados.
const usuario = await repository.create({
name: 'Maria Silva',
email: '[email protected]'
});
Atualiza um documento que corresponde ao filtro.
const usuarioAtualizado = await repository.update(
{ email: '[email protected]' },
{ name: 'Maria Santos' }
);
Substitui um documento inteiro por ID.
const usuarioSubstituido = await repository.replace(userId, {
name: 'Novo Nome',
email: '[email protected]',
age: 25
});
Encontra um único documento que corresponde aos filtros.
const usuario = await repository.read({ email: '[email protected]' });
Encontra múltiplos documentos que correspondem aos filtros.
const usuarios = await repository.search({ age: { $gte: 18 } });
Remove um documento por ID.
const usuarioDeletado = await repository.remove(userId);
const ModeloBase = mongoose.model('Base', schemaBase);
const ModeloFilho = mongoose.model('Filho', schemaFilho);
const repository = new Turbinate(ModeloFilho, ModeloBase);
// Operações de leitura e busca usarão o modelo pai
const resultado = await repository.read({ algumCampo: 'valor' });
Turbinate é construído com TypeScript e fornece segurança de tipos completa:
interface Usuario {
name: string;
email: string;
age: number;
}
const UserModel = mongoose.model<Usuario>('User', userSchema);
const repository = new Turbinate<Usuario>(UserModel);
// Todas as operações agora são type-safe
const usuario = await repository.create({
name: 'João',
email: '[email protected]',
age: 30
});
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Affonso Xavier - @dixavier27