zenidb
v1.0.5
Published
Uma SDK de banco de dados simples, rápida e com suporte a criptografia AES-256
Maintainers
Readme
🔐 ZenIDB
Uma SDK de banco de dados simples, rápida e com suporte a criptografia AES-256 pra Node.js. Perfeita pra quem quer algo leve e fácil de usar!
✨ Características
- 🔒 Criptografia AES-256 opcional (bem segura!)
- ⚡ Síncrono - Sem callbacks ou promises, direto ao ponto
- 🎯 Nested keys - Suporta
"user.profile.name"sem problemas - 👀 Watchers - Observa mudanças em tempo real
- 💾 Backup automático - Nunca perca seus dados
- 🔄 Auto-set opcional - Cria chaves automaticamente se quiser
- 📦 Zero dependências - Leve e rápido
- 📘 TypeScript - Totalmente tipado, autocomplete funciona perfeitamente
📦 Instalação
npm install zenidbBem simples né? Só isso mesmo!
🚀 Uso Básico
JavaScript
const { Database } = require('zenidb');
// Criar instância (bem fácil)
const db = new Database('./database.json');
// Set - salvar dados
db.set('usuario', 'João');
db.set('user.profile.name', 'João Silva'); // Nested keys funcionam perfeitamente
// Get - pegar dados
const usuario = db.get('usuario');
const nome = db.get('user.profile.name');
// Has - verificar se existe
if (db.has('usuario')) {
console.log('Usuário existe!');
}
// Delete - deletar
db.delete('usuario');TypeScript
import { Database } from 'zenidb';
// Criar instância
const db = new Database('./database.json');
// Set com tipos (TypeScript é massa!)
db.set<string>('usuario', 'João');
db.set<string>('user.profile.name', 'João Silva');
// Get com tipos
const usuario: string = db.get<string>('usuario')!;
const nome: string = db.get<string>('user.profile.name')!;
// Has
if (db.has('usuario')) {
console.log('Usuário existe!');
}
// Delete
db.delete('usuario');🔐 Criptografia
Quer proteger seus dados? É só passar uma senha na criação:
const db = new Database('./database.json', {
encrypt: 'minha-senha-secreta'
});
// Agora tudo fica criptografado automaticamente
db.set('senha', '123456');Os dados ficam seguros no arquivo, mas você acessa normalmente no código. Bem prático!
📊 Arrays
Trabalhar com arrays é bem simples:
// Push - adicionar itens
db.push('lista', 'item1');
db.push('lista', 'item2');
// Pull - remover itens (usa função de filtro)
db.pull('lista', item => item === 'item1');
// Find - encontrar um item específico
const item = db.find('lista', item => item.startsWith('item'));🔢 Operações Matemáticas
Pra trabalhar com números, tem funções bem úteis:
// Set valor inicial
db.set('pontos', 0);
// Add - somar valores
db.add('pontos', 10); // 10
db.add('pontos', 5); // 15
// Incrementar (padrão é +1)
db.inc('pontos'); // 16
db.inc('pontos', 5); // 21
// Decrementar (padrão é -1)
db.dec('pontos'); // 20
db.dec('pontos', 5); // 15🔄 Boolean
Alternar valores booleanos é super fácil:
db.set('ativo', true);
db.toggle('ativo'); // false
db.toggle('ativo'); // true👀 Watchers
Quer saber quando algo muda? Use watchers:
db.watch('usuario', (oldValue, newValue) => {
console.log(`Mudou de ${oldValue} para ${newValue}`);
});
db.set('usuario', 'Maria'); // Dispara o watcher automaticamenteBem útil pra fazer coisas quando dados mudam!
💾 Backup
Fazer backup é moleza:
// Backup com nome automático (usa timestamp)
const fileName = db.backup(); // backup-1234567890.json
// Ou com nome customizado
db.backup('meu-backup.json');Os backups ficam na pasta backups/ automaticamente.
🔍 Busca Avançada
Buscar chaves é bem fácil:
// Buscar chaves que começam com prefixo
const usuarios = db.startsWith('user.'); // ['user.name', 'user.email', 'user.age']
// Buscar chaves que terminam com sufixo
const nomes = db.endsWith('.name'); // ['user.name', 'admin.name']
// Buscar chaves que contêm texto
const perfis = db.includes('profile'); // ['user.profile', 'admin.profile']
// Busca profunda em objetos aninhados
const resultados = db.deepFind((key, value) => value === 'João');
// [{ key: 'user.name', value: 'João' }, { key: 'admin.name', value: 'João' }]
// Encontrar todas as chaves com um valor específico
const chaves = db.findByValue('João'); // ['user.name', 'admin.name']📊 Arrays Avançados
Tem várias funções úteis pra trabalhar com arrays:
// Map - transformar array
db.map('lista', item => item.toUpperCase());
// Reduce - reduzir a um valor
const soma = db.reduce('numeros', (acc, val) => acc + val, 0);
// Some - verificar se algum satisfaz
if (db.some('lista', item => item > 10)) {
console.log('Tem item maior que 10!');
}
// Every - verificar se todos satisfazem
if (db.every('lista', item => item > 0)) {
console.log('Todos são positivos!');
}
// Includes - verificar se contém
if (db.includesArray('lista', 'item1')) {
console.log('Tem item1!');
}
// Unique - remover duplicatas
db.unique('lista');
// Sort - ordenar
db.sort('lista', (a, b) => a.localeCompare(b));
// Take - pegar primeiros N
const primeiros = db.take('lista', 3);
// Skip - pular primeiros N
const restantes = db.skip('lista', 2);
// Count - contar itens
const total = db.count('lista');
// CountBy - contar por condição
const positivos = db.countBy('numeros', n => n > 0);🔤 Strings
Transformações de string são simples:
db.set('nome', 'joão silva');
db.uppercase('nome'); // 'JOÃO SILVA'
db.lowercase('nome'); // 'joão silva'
db.capitalize('nome'); // 'João silva'🔀 Merge & Update
Atualizar objetos parcialmente:
// Merge - mesclar objeto
db.set('user', { name: 'João', age: 25 });
db.merge('user', { email: '[email protected]' });
// Resultado: { name: 'João', age: 25, email: '[email protected]' }
// Update - atualizar com função
db.update('pontos', pontos => pontos + 10);⚖️ Comparação
Comparar valores é fácil:
// Comparar duas chaves
if (db.equals('user1', 'user2')) {
console.log('São iguais!');
}
// Comparar com valor específico
if (db.isEqual('idade', 25)) {
console.log('Tem 25 anos!');
}
// Maior/Menor que
if (db.isGreaterThan('pontos', 100)) {
console.log('Tem mais de 100 pontos!');
}📁 Path Manipulation
Mover, copiar e renomear chaves:
// Move - mover chave
db.move('user.old', 'user.new');
// Copy - copiar chave
db.copy('user.profile', 'user.backup');
// Rename - renomear
db.rename('oldKey', 'newKey');⏰ TTL (Time To Live)
Dados que expiram automaticamente:
// Definir com expiração (3600 segundos = 1 hora)
db.setWithTTL('token', 'abc123', 3600);
// Verificar se expirou
if (db.isExpired('token')) {
console.log('Token expirado!');
}
// Pegar valor (retorna undefined se expirou)
const token = db.getWithTTL('token');
// Limpar todos os expirados
const removidos = db.clearExpired();📦 Batch Operations
Executar várias operações de uma vez:
// Batch com array de operações
db.batch([
{ type: 'set', key: 'user1', value: 'João' },
{ type: 'set', key: 'user2', value: 'Maria' },
{ type: 'inc', key: 'contador', value: 1 },
{ type: 'delete', key: 'user3' }
]);
// Batch com callback (mais simples)
db.batchCallback(() => {
db.set('a', 1);
db.set('b', 2);
db.set('c', 3);
});📈 Estatísticas
Ver estatísticas do banco:
const stats = db.stats();
// { size: 10, keys: 10, encrypted: true }🧬 Clone
Clonar valores e bancos:
// Clonar um valor
const clone = db.clone('user');
// Clonar banco inteiro para novo arquivo
const novoBanco = db.cloneTo('./novo-banco.json');🔧 Opções
Na hora de criar o banco, você pode passar algumas opções:
const db = new Database('./database.json', {
encrypt: 'senha-secreta', // Criptografar os dados
autoSet: true // Criar chaves automaticamente no get() se não existirem
});📚 API Completa
Aqui tem todas as funções disponíveis:
Métodos Básicos
get(key, defaultValue)- Pega um valor (pode passar valor padrão)set(key, value)- Salva um valorhas(key)- Verifica se a chave existedelete(key)- Deleta uma chavereset(key)- Reseta pra nullall()- Pega todos os dadosclear()- Limpa tudosize()- Retorna quantas chaves temisEmpty()- Verifica se tá vaziokeys()- Retorna array com todas as chavesvalues()- Retorna array com todos os valores
Busca Avançada
startsWith(prefix)- Busca chaves que começam com prefixoendsWith(suffix)- Busca chaves que terminam com sufixoincludes(text)- Busca chaves que contêm textodeepFind(filterFn)- Busca profunda em objetos aninhadosfindByValue(value)- Encontra todas as chaves com um valor específico
Arrays
push(key, value)- Adiciona item no arraypull(key, filterFn)- Remove itens do array (usa função)find(key, filterFn)- Encontra um item no arraymap(key, mapFn)- Transforma cada item do arrayreduce(key, reduceFn, initialValue)- Reduz array a um valorsome(key, predicate)- Verifica se algum item satisfaz condiçãoevery(key, predicate)- Verifica se todos satisfazem condiçãoincludesArray(key, value)- Verifica se array contém valorunique(key)- Remove duplicatasreverse(key)- Reverte ordem do arraysort(key, compareFn)- Ordena arraytake(key, count)- Pega primeiros N itensskip(key, count)- Pula primeiros N itenscount(key)- Conta itens no arraycountBy(key, predicate)- Conta itens que satisfazem condição
Números
add(key, value)- Soma valoresinc(key, value = 1)- Incrementa (padrão +1)dec(key, value = 1)- Decrementa (padrão -1)
Boolean
toggle(key, defaultValue)- Alterna o valor booleano
Strings
uppercase(key)- Converte para maiúsculaslowercase(key)- Converte para minúsculascapitalize(key)- Primeira letra maiúscula
Merge & Update
merge(key, partial)- Mescla objeto parcialmenteupdate(key, updateFn)- Atualiza usando função
Comparação
equals(key1, key2)- Compara valores de duas chavesisEqual(key, value)- Compara com valor específicoisGreaterThan(key, value)- Verifica se é maior queisLessThan(key, value)- Verifica se é menor que
Path Manipulation
move(fromKey, toKey)- Move chave para outro caminhocopy(fromKey, toKey)- Copia chave para outro caminhorename(oldKey, newKey)- Renomeia uma chave
TTL (Time To Live)
setWithTTL(key, value, ttlSeconds)- Define valor com expiraçãoisExpired(key)- Verifica se expirougetWithTTL(key, defaultValue)- Pega valor (retorna undefined se expirou)clearExpired()- Remove todas as chaves expiradas
Batch Operations
batch(operations)- Executa múltiplas operações de uma vezbatchCallback(callback)- Executa operações usando callback
Contagem Avançada
countKeys(prefix)- Conta chaves que começam com prefixo
Objetos
objectKeys(key)- Retorna chaves de um objetoobjectValues(key)- Retorna valores de um objetohasKey(key, propertyKey)- Verifica se objeto tem propriedade
Estatísticas
stats()- Retorna estatísticas do banco
Clone
clone(key)- Clona um valor (deep copy)cloneTo(newFilePath)- Clona banco inteiro para novo arquivo
Utilitários
ensure(key, value)- Garante que a chave existe (cria se não tiver)watch(key, callback)- Observa mudanças numa chavebackup(name)- Cria backupexport()- Exporta todos os dadosimport(data)- Importa dadosforEach(callback)- Itera sobre todas as entradasfilter(filterFn)- Filtra entradas
📄 Licença
Esse projeto ta licenciado sob a Licença MIT.
Copyright (c) 2026 ZenIDB Contributors
🤝 Contribuindo
Contribuições são super bem-vindas! Se tiver alguma ideia ou encontrar algum bug, pode abrir uma issue ou fazer um pull request. Toda ajuda é bem vinda! 😊
