@jeandev_2030/jsdb
v2.0.4
Published
đïž Banco de dados JSON modular, escalĂĄvel e puro com Node.js - Sem dependĂȘncias externas
Maintainers
Readme
đïž JsDB - Banco de Dados JSON Modular
Um banco de dados JSON modular, escalĂĄvel e puro com Node.js. Sem dependĂȘncias externas, pronto para produção!
âš CaracterĂsticas
â
Totalmente Modular - Arquitetura escalĂĄvel e bem organizada
â
Zero DependĂȘncias - Usa apenas o Node.js nativo
â
Type Safe - Validação de dados integrada
â
Performance - Sistema de Ăndices para buscas rĂĄpidas
â
PersistĂȘncia AutomĂĄtica - Salva dados em JSON automaticamente
â
API Simples - FĂĄcil de usar e aprender
â
Pronto para Npm - Pode ser instalado em qualquer projeto
đŠ Instalação
Local (desenvolvimento)
git clone https://github.com/jeanbyte2030-ops/JsDB.git
cd JsDB
npm installđ Uso RĂĄpido
1. Importar o mĂłdulo
const { Database } = require('./index');
// ou
const JsDB = require('./index');
const { createDatabase } = JsDB;2. Criar database
const db = new Database('./meu-database.json');
// ou usar factory function
const db = createDatabase('./meu-database.json');3. Criar tabelas
db.createTable('usuarios');
db.createTable('posts');4. OperaçÔes CRUD
CREATE (Inserir)
const novoUsuario = db.insert('usuarios', {
nome: 'JoĂŁo Silva',
email: '[email protected]',
idade: 25
});
console.log(novoUsuario);
// { id: '1234567890abc', nome: 'JoĂŁo Silva', email: '[email protected]', idade: 25, createdAt: '2025-01-23T...' }READ (Buscar)
// Buscar todos
const todos = db.findAll('usuarios');
// Buscar por ID
const usuario = db.findById('usuarios', 'id-do-usuario');
// Buscar com filtro
const resultado = db.find('usuarios', { idade: 25 });
const resultado = db.find('usuarios', { ativo: true });
// Buscar com função (predicate)
const maioresDeIdade = db.find('usuarios', user => user.idade >= 18);UPDATE (Atualizar)
db.update('usuarios', 'id-do-usuario', {
idade: 26,
ativo: false
});DELETE (Deletar)
// Deletar um registro
db.delete('usuarios', 'id-do-usuario');
// Deletar toda tabela
db.dropTable('usuarios');đ§Ș CLI Interativo (estilo mongosh)
VocĂȘ pode usar o JsDB no terminal para gerenciar tabelas e registros.
Rodar localmente
node bin/jsdbEscolher arquivo
node bin/jsdb --file ./meu-db.jsonUsando como comando global (apĂłs npm link)
npm link
jsdb --file ./meu-db.jsonComandos principais
help
use <arquivo>
show tables
create table <tabela>
drop table <tabela>
insert <tabela> <json>
find <tabela> <json>
findall <tabela>
findbyid <tabela> <id>
update <tabela> <id> <json>
delete <tabela> <id>
deleteall <tabela>
count <tabela>
info
save
load
config <json>
exitExemplos
create table usuarios
insert usuarios {"nome":"Ana","idade":22}
find usuarios {"idade":22}
update usuarios 123 {"ativo":true}
delete usuarios 123đ API Completa
Database Methods
| Método | Descrição | Exemplo |
|--------|-----------|---------|
| createTable(nome, registros?) | Cria nova tabela | db.createTable('usuarios') |
| insert(tabela, obj) | Insere registro | db.insert('usuarios', {...}) |
| findAll(tabela) | Lista todos | db.findAll('usuarios') |
| findById(tabela, id) | Busca por ID | db.findById('usuarios', id) |
| find(tabela, filtro) | Busca com filtro/predicate | db.find('usuarios', {ativo: true}) |
| update(tabela, id, obj) | Atualiza | db.update('usuarios', id, {...}) |
| delete(tabela, id) | Deleta | db.delete('usuarios', id) |
| count(tabela) | Conta registros | db.count('usuarios') |
| getTables() | Lista tabelas | db.getTables() |
| dropTable(tabela) | Remove tabela | db.dropTable('usuarios') |
| deleteAll(tabela) | Limpa todos os registros | db.deleteAll('usuarios') |
| configure(config) | Configura DB | db.configure({autoSave: true}) |
| save() | Salva manualmente | db.save() |
| load() | Carrega do arquivo | db.load() |
| getInfo() | Info do database | db.getInfo() |
âïž Configuração
const db = new Database('./data.json');
// ou passar config no construtor
const dbComConfig = new Database('./data.json', {
autoSave: true,
prettyPrint: true,
encoding: 'utf-8'
});
// Configurar opçÔes
db.configure({
autoSave: true, // Salva automaticamente após cada operação
prettyPrint: true, // Formata JSON com indentação
encoding: 'utf-8' // Encoding do arquivo
});đĄ Exemplos PrĂĄticos
Exemplo 1: Gerenciador de Tarefas
const { Database } = require('@jeanbyte/jsdb');
const db = new Database('./tarefas.json');
// Criar tabela
db.createTable('tarefas');
// Adicionar tarefas
db.insert('tarefas', {
titulo: 'Estudar JavaScript',
concluida: false,
prioridade: 'alta'
});
db.insert('tarefas', {
titulo: 'Fazer exercĂcios',
concluida: true,
prioridade: 'média'
});
// Buscar tarefas nĂŁo concluĂdas
const pendentes = db.find('tarefas', { concluida: false });
console.log('Tarefas pendentes:', pendentes);
// Marcar como concluĂda
const tarefa = db.findAll('tarefas')[0];
db.update('tarefas', tarefa.id, { concluida: true });Exemplo 2: Sistema de Blog
const db = new Database('./blog.json');
// Criar tabelas
db.createTable('posts');
db.createTable('comentarios');
// Criar post
const post = db.insert('posts', {
titulo: 'Meu primeiro post',
conteudo: 'Lorem ipsum...',
autor: 'JoĂŁo',
likes: 0
});
// Adicionar comentĂĄrios
db.insert('comentarios', {
postId: post.id,
autor: 'Maria',
texto: 'Adorei o post!'
});
// Buscar comentĂĄrios de um post
const comentarios = db.find('comentarios', { postId: post.id });
console.log(`Post tem ${comentarios.length} comentĂĄrios`);Exemplo 3: Ecommerce Simplificado
const db = new Database('./ecommerce.json');
db.createTable('produtos');
db.createTable('carrinho');
// CatĂĄlogo
const notebook = db.insert('produtos', {
nome: 'Notebook',
preco: 3500,
estoque: 10,
categoria: 'eletrĂŽnicos'
});
// Carrinho do cliente
db.insert('carrinho', {
clienteId: 'cliente-123',
produtoId: notebook.id,
quantidade: 2,
precoTotal: 7000
});
// Atualizar estoque
db.update('produtos', notebook.id, {
estoque: 8
});
// Gerar relatĂłrio
console.log(`Total de produtos: ${db.count('produtos')}`);
console.log(`Itens no carrinho: ${db.count('carrinho')}`);đ Estrutura do Projeto
JsDB/
âââ bin/
â âââ jsdb # CLI do terminal
âââ index.js # Entry point do mĂłdulo
âââ src/
â âââ cli.js # CLI interativo
â âââ Database.js # Classe principal
â âââ Table.js # Classe de tabela
â âââ Utils.js # UtilitĂĄrios
âââ examples/
â âââ exemplo1-basico.js
â âââ exemplo2-avancado.js
â âââ exemplo3-modulo.js
âââ data.json # Arquivo de dados
âââ package.json # Metadados
âââ README.md # Este arquivođ§Ș Testando
# Executar exemplo bĂĄsico
npm run example:basico
# Executar exemplo avançado
npm run example:avancado
# Executar exemplo como mĂłdulo
npm run example:modulo
# Teste rĂĄpido
npm testđŻ Casos de Uso
- â Prototipagem rĂĄpida
- â Pequenas aplicaçÔes
- â Projetos de aprendizado
- â APIs serverless (Lambda, Vercel)
- â AplicaçÔes CLI
- â Sistemas de cache
- â ConfiguraçÔes persistentes
⥠Performance
- Inserção: O(1) - Tempo constante
- Busca por ID: O(1) - Via Ăndice hash
- Busca com filtro: O(n) - Varredura linear
- Atualização: O(1) - Via Ăndice hash
- Deleção: O(1) - Via Ăndice hash
đ Segurança
- Validação de dados
- Isolamento de contexto por tabela
- Clone profundo dos dados (previne mutaçÔes)
- Tratamento de erros
đ Licença
MIT © 2026 JsByte
đ€ Contribuindo
ContribuiçÔes são bem-vindas! Sinta-se à vontade para:
- Fazer um Fork
- Criar uma branch para sua feature (
git checkout -b feature/NovaFeature) - Commit suas mudanças (
git commit -m 'Add Nova Feature') - Push para a branch (
git push origin feature/NovaFeature) - Abrir um Pull Request
đ Suporte
- đ§ Email: [email protected]
- đ GitHub: @jeanbyte2030-ops
- đŹ Issues: Abrir issue
đșïž Roadmap
- [ ] Suporte a transaçÔes
- [ ] Sistema de backup automĂĄtico
- [ ] Criptografia de dados
- [ ] Sistema de permissÔes
- [x] CLI Tool
- [ ] Web Dashboard
- [ ] Replicação de dados
- [ ] Publicar no NPM
Desenvolvido â€ïž para a comunidade Node.js
