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 🙏

© 2024 – Pkg Stats / Ryan Hefner

jeytabase

v1.0.2

Published

Jeytabase is a lightweight JSON-based database management library for Node.js. It provides a simple way to create, read, update, and delete data in JSON files, with support for data encryption, automatic backups, and advanced filtering and sorting capabil

Downloads

177

Readme

Jeytabase

Jeytabase is a lightweight JSON-based database management library for Node.js. It provides a simple way to create, read, update, and delete data in JSON files, with support for data encryption, automatic backups, and advanced filtering and sorting capabilities.

Features

  • Create, read, update, and delete (CRUD) operations
  • Advanced filtering with operators like [>], [<], [!], [~], and more
  • Customizable sorting with multiple fields and sorting directions
  • Data encryption support with AES-256-CBC encryption
  • Automatic backups with configurable intervals
  • Automatic data saving after changes
  • Easy-to-use interface with modular design

Installation

Install Jeytabase using npm:

npm install jeytabase

Usage

Here's a basic example of how to use Jeytabase:

const Jeytabase = require('jeytabase');

// Initialize the database
const db = new Jeytabase('myDatabase', {
    path: 'myDatabasePath',
    auto_save: true,
    auto_backup: 3600,
    encryption: true,
    encrypt_key: 'mySecretKey'
});

// Create a table
db.create('users', {
    name: '',
    age: 0,
    email: ''
});

// Insert data into the table
db.insert('users', {
    name: 'Alice',
    age: 30,
    email: '[email protected]'
});

// Select data with filtering
const results = db.select('users', {
    "age[>=]": '25'
});

// Update data
db.update('users', { age: 31 }, { name: 'Alice' });

// Delete data
db.delete('users', { age: '[<]18' });

console.log(results);

Configuration Options

When initializing Jeytabase, you can configure several options:

path: The directory where the database files are stored. Default is 'database'.
start_backup: Whether to create a backup when the database starts. Default is true.
auto_backup: Interval for automatic backups in seconds. Default is 86400 (24 hours).
auto_save: Automatically save changes to the database file after each operation. Default is true.
encryption: Enable data encryption using AES-256-CBC. Default is false.
encrypt_key: The encryption key for securing data.

Model

Using models with Jeytabase:

const Jeytabase = require('jeytabase');

// Initialize the database
const jeydb = new Jeytabase('blog', {
    path: 'database',
    start_backup: false,
    auto_backup: 86400,
    auto_save: true,
    encryption: true,
    encrypt_key: 'mySecretKey'
});

// Create a users table
jeydb.create('users', {
    username: '',
    password: '',
    is_active: 0
}, {
    update_timestamp: true,
    insert_timestamp: true
});

// Create a posts table
jeydb.create('posts', {
    uid: '',
    title: '',
    text: ''
}, {
    update_timestamp: true,
    insert_timestamp: true
});

// Define model variables ( export from module )
const user_model = jeydb.blog.models.users,
const post_model = jeydb.blog.models.posts,

// Delete data
user_model.delete();
post_model.delete();

// Insert new values
user_model.insert({
    username: 'zeydan',
    password: '12345',
    is_active: 1
}, { save: false });

user_model.insert({
    username: 'admin',
    password: '12345',
    is_active: 1
}, { save: false });

user_model.insert({
    username: 'user1',
    password: '12345',
    is_active: 1
}, { save: false });

user_model.insert({
    username: 'user2',
    password: '12345',
    is_active: 1
}, { save: false });

// Manually save data
user_model.save();

API Methods

List of available methods:

create(tableName, structure, options)

Creates a new table with the specified structure.

tableName: Name of the table.
structure: An object representing the table's structure (field names and default values).
options: Additional options for the table, such as insert_timestamp and update_timestamp.

select(tableName, where, order)

Selects data from a table with optional filtering and sorting.

tableName: Name of the table.
where: An object specifying conditions for filtering. Supports operators like [>], [<], [!], [~], etc.
order: Sorting options, can be a function or an array specifying columns and sort directions.

insert(tableName, values, options)

Inserts a new row into the specified table.

tableName: Name of the table.
values: An object with field values to insert.
options: Optional settings for the operation.

update(tableName, data, where, options)

Updates rows in the table based on the specified conditions.

tableName: Name of the table.
data: An object containing the new field values.
where: Conditions for filtering rows to update.
options: Optional settings for the operation.

delete(tableName, where, options)

Deletes rows from the table that match the specified conditions.

tableName: Name of the table.
where: Conditions for filtering rows to delete.
options: Optional settings for the operation.

save(tableName)

Saves the current state of a table to the JSON file.

Methods Variables

List of variables:

Options

Available option for methods

save: true // Prevents auto save new changes.

Where

Possible "where" operations

"email": "[email protected]", // email = '[email protected]'

"user_id[>]": 200, // user_id > 200

"user_id[>=]": 200, // user_id >= 200

"user_id[<]": 200, // user_id < 200

"user_id[<=]": 200, // user_id <= 200

"user_id[!]": 200, // user_id != 200

"city[~]": "lon" // "city" LIKE '%lon%'

["age[<>]": [200, 500]] // age BETWEEN 200 AND 500

["age[><]": [200, 500]] // age NOT BETWEEN 200 AND 500

Complex Where Operations

Complex "where" operations

// Pass a function to filter rows
[age: (r) => {
    return r > 5
}]

// user_id IN (2,123,234,54) OR email IN ('[email protected]','[email protected]','[email protected]')
"OR": {
	"user_id": [2, 123, 234, 54],
	"email": ["[email protected]", "[email protected]", "[email protected]"]
}

// "user_name" != 'foo' AND "user_id" != 1024
"AND": {
	"user_name[!]": "foo",
	"user_id[!]": 1024
}

(user_name = 'foo' OR email = '[email protected]') AND password = '12345'
"AND": {
	"OR": {
		"user_name" => "foo",
		"email" => "[email protected]"
    },
	"password" => "12345"
}

ORDER

Possible "ORDER" operations. Pass "ORDER" inside "where".

"ORDER": "user_id",
"ORDER": {"user_id":  [43, 12, 57, 98, 144, 1]}
"ORDER": {"profile_id":  "DESC"}
"ORDER": {"date":  "ASC"}

LIMIT

Possible "LIMIT" operations. Pass "LIMIT" inside "where".

// Get the first 100 rows.
'LIMIT': 100

// Start from the top 20 rows and get the next 100.
'LIMIT': [20, 100],

Encryption

If encryption is enabled, all data is encrypted using AES-256-CBC before saving to disk. To enable encryption, provide an encrypt_key when initializing the database.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contributing

Contributions are welcome! Feel free to submit a pull request or open an issue to discuss changes or improvements.