npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

json-db-engine

v1.0.0

Published

Database Management System sederhana menggunakan JSON dan Node.js File System

Readme

LearnJS - Database Management System

Selamat datang! Ini adalah project pembelajaran saya untuk memahami cara membuat sistem manajemen database sederhana menggunakan JavaScript dan Node.js.

📋 Deskripsi Project

Project ini merupakan implementasi Database Class dengan operasi CRUD (Create, Read, Update, Delete) yang dapat menyimpan dan mengelola data dalam file JSON. Melalui project ini, saya belajar tentang:

  • Membuat class dan object-oriented programming di JavaScript
  • Operasi file system (fs) di Node.js
  • Manipulasi dan parsing data JSON
  • Implementasi operasi CRUD
  • ES Modules (import/export)
  • Array methods: .push(), .filter(), .find()
  • Pemisahan logic ke modul-modul terpisah

📁 Struktur Project

json-db-enginee/
├── module.js       # Wrapper untuk module fs
├── load.js         # Fungsi untuk load data dari file
├── read.js         # Fungsi untuk membaca data terstruktur
├── add.js          # Fungsi untuk menambah data
├── find.js         # Fungsi untuk mencari data
├── delete.js       # Fungsi untuk menghapus data
├── main.js         # Class Database (inti aplikasi)
├── example.js      # Demonstrasi lengkap semua operasi
├── example.json    # File data (database)
├── package.json    # Konfigurasi project
└── README.md       # File dokumentasi ini

🚀 Cara Memulai

Prerequisites

  • Node.js versi 12 atau lebih tinggi
  • Text Editor/IDE (VS Code, dll)

Install Dependencies

npm install

Menjalankan Project

node example.js

🏛️ Arsitektur Kode

1. module.js - Module Wrapper

Wrapper sederhana untuk module fs agar mudah di-import:

import fs from 'fs'

export const mdl = {
    fs: fs
}

2. load.js - Load Data

Membaca file dan meng-parse data JSON ke array:

export default function load(path) {
    const dataPath = path
    const data = mdl.fs.readFileSync(dataPath, 'utf-8')
    return JSON.parse(data)
}

3. read.js - Read Data

Membaca file dan langsung return data yang sudah di-parse:

export default function read(path) {
    const data = mdl.fs.readFileSync(dataPath, 'utf-8')
    return JSON.parse(data)
}

4. add.js - Create/Add Data

Menambahkan data baru ke array dan menyimpannya ke file:

export default function add(path, data) {
    const database = load(path)
    database.push(data)
    const dataPath = mdl.fs.writeFileSync(path, JSON.stringify(database, null, 2))
    return dataPath
}

5. find.js - Read/Search Data

Mencari data berdasarkan property dan value:

export default function find(path, object, query) {
    const database = load(path)
    const cari = database.find((item) => item[object] === query)
    return cari
}

6. delete.js - Delete Data

Menghapus data berdasarkan property dan value:

export default function deleted(path, object, query) {
    const database = load(path)
    const delet = database.filter((item) => item[object] !== query)
    return mdl.fs.writeFileSync(path, JSON.stringify(delet, null, 2))
}

7. main.js - Database Class

Class utama yang menggabungkan semua operasi:

export default class Database {
    constructor(path) {
        this.path = path
        load(this.path)
    }

    read() {
        return read(this.path)
    }

    add(data) {
        return add(this.path, data)
    }

    find(object, query) {
        return find(this.path, object, query)
    }

    delete(object, query) {
        return deleted(this.path, object, query)
    }
}

💡 Contoh Penggunaan Lengkap

1. Inisialisasi Database

import Database from './main.js'

const db = new Database('./example.json')

2. Read - Membaca Semua Data

const allData = db.read()
console.log(allData)
// Output: [{ name: 'johsh', age: 10 }, ...]

3. Add - Menambah Data Baru

const newUser = {
    name: 'Nasyuwa',
    age: 17
}
db.add(newUser)

4. Find - Mencari Data

const user = db.find('name', 'Budi Santoso')
console.log(user)
// Output: { name: 'Budi Santoso', age: 25 }

5. Delete - Menghapus Data

db.delete('name', 'johsh')
// Menghapus user dengan nama 'johsh' dari database

📊 Format Data

Data disimpan dalam format JSON array:

[
  {
    "name": "Nasyuwa",
    "age": 17
  }
  
]

🎯 Yang Saya Pelajari

Konsep Pemrograman

✅ Object-Oriented Programming (Class)
✅ CRUD Operations (Create, Read, Update, Delete)
✅ Modular Code Organization
✅ ES Modules (import/export)

JavaScript Features

✅ Array Methods: .push(), .filter(), .find()
✅ Arrow Functions: (item) => item.name
✅ Template Literals dan String Manipulation
✅ JSON Parsing dan Stringifying

Node.js

✅ File System Module (fs)
✅ Synchronous File Operations
✅ Path Handling
✅ Module System

🔄 Alur Data

User Input
    ↓
Database Class (main.js)
    ↓
Fungsi Spesifik (add.js, find.js, delete.js, etc.)
    ↓
load.js (Parse JSON)
    ↓
File System (fs.readFileSync)
    ↓
example.json

⚠️ Catatan & Pembaruan Ke Depan

Catatan Saat Ini

  • Menggunakan synchronous file operations untuk kesederhanaan pembelajaran
  • Error handling masih minimal

Improvement Ke Depan

  • [ ] Menggunakan async/await untuk operasi file yang lebih efisien
  • [ ] Menambahkan error handling yang lebih robust
  • [ ] Validasi data sebelum menyimpan
  • [ ] Menambahkan fitur update (edit data existing)
  • [ ] Support untuk berbagai format file (CSV, XML, dll)
  • [ ] Database validation schema
  • [ ] Logging system

🛠️ Technologies Used

  • Language: JavaScript (ES6+)
  • Runtime: Node.js
  • Storage: JSON Files
  • Module System: ES Modules

📝 Cara Menjalankan Example

File example.js mendemonstrasikan semua operasi:

# Jalankan example
node example.js

# Output akan menampilkan:
# ✅ Database initialized
# 📖 READ - Membaca semua data
# ➕ ADD - Menambah data baru
# 🔍 FIND - Mencari data
# 🗑️ DELETE - Menghapus data

📚 Resources yang Membantu

👨‍💻 Author

Dibuat sebagai bagian dari perjalanan pembelajaran JavaScript dan Node.js dari nol.

Nama: Nasyuwa
Email: [email protected]
GitHub: @wa130

📄 License

Project ini dilisensikan di bawah MIT License - lihat file LICENSE untuk detail lengkapnya.

Anda bebas untuk:

  • ✅ Menggunakan project ini untuk tujuan komersial maupun personal
  • ✅ Memodifikasi dan mengubah kode sesuai kebutuhan
  • ✅ Mendistribusikan ulang project ini
  • ✅ Menggunakan project ini sebagai basis untuk project lain

Dengan syarat:

  • 📋 Menyertakan lisensi dan copyright notice dalam setiap distribusi

Happy Learning & Coding! 🚀✨

Jika Anda memiliki pertanyaan atau saran untuk improvement, feel free untuk membuat issues atau pull requests!