Skip to content

A lightweight TypeScript library for file-based JSON database operations with querying capabilities, CRUD operations, and zero dependencies.

License

Notifications You must be signed in to change notification settings

NeaByteLab/Jsonary

Repository files navigation

Jsonary Node.js CI

A lightweight TypeScript library for file-based JSON database operations with querying capabilities.

πŸ“¦ Installation

npm install @neabyte/jsonary

πŸ”§ Module Support

Jsonary supports both ESM and CommonJS:

πŸ“₯ ESM (ES Modules)

import Jsonary from '@neabyte/jsonary'

πŸ“¦ CommonJS

const Jsonary = require('@neabyte/jsonary')

πŸš€ Usage

βš™οΈ Basic Setup

import Jsonary from '@neabyte/jsonary' const db = new Jsonary({ path: './data.json' })

βž• Insert Data

// Single record db.insert({ name: 'John', age: 30 }) // Multiple records db.insertMany([ { name: 'Jane', age: 25 }, { name: 'Bob', age: 35 } ])

πŸ” Query Data

// Get all records const all = db.get() // String-based conditions const adults = db.where('age >= 18').get() const john = db.where('name = John').first() // Query nested properties const admins = db.where('profile.role = admin').get() const activeUsers = db.where('profile.active = true').get() const darkThemeUsers = db.where('profile.settings.theme = dark').get() // Function-based filtering const filtered = db.where(item => item.age > 25).get()

✏️ Update Data

// Update specific records db.updateWhere('age > 30', { status: 'senior' }) // Update nested properties db.updateWhere('name = John', { 'profile.active': true })

πŸ—‘οΈ Delete Data

// Delete by condition const deleted = db.deleteWhere('age < 18') // Clear all data db.clear()

πŸ”— Chained Operations

db.where('age > 25') .where('name contains "John"') .update({ verified: true }) const count = db.where('status = active').count() // Chained operations with nested properties db.where('profile.active = true') .where('profile.role = admin') .update({ 'profile.verified': true }) const adminCount = db.where('profile.role = admin').where('profile.verified = true').count()

πŸ”Ž Query Operators

  • = - Equal
  • != - Not equal
  • > - Greater than
  • < - Less than
  • >= - Greater than or equal
  • <= - Less than or equal
  • contains - String contains
  • startsWith - String starts with
  • endsWith - String ends with

πŸ“š API Reference

  • constructor(options: { path: string }) - Initialize database
  • insert(item: Record<string, unknown>) - Insert single record
  • insertMany(items: Record<string, unknown>[]) - Insert multiple records
  • where(condition: string | Function) - Create query builder
  • updateWhere(condition: string | Function, data: Record<string, unknown>) - Update records (returns count)
  • deleteWhere(condition: string | Function) - Delete records (returns count)
  • get() - Get all records
  • reload() - Reload data from file
  • clear() - Clear all data

Query Methods (via where())

  • where().get() - Get filtered records
  • where().first() - Get first filtered record
  • where().count() - Get count of filtered records
  • where().update(data) - Update filtered records
  • where().delete() - Delete filtered records (returns count)

πŸ“„ License

This project is licensed under the MIT license. See the LICENSE file for more info.