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

@medyll/idae-db

v0.155.2

Published

@medyll/idae-db is a flexible and powerful library for interacting with various databases, with a particular focus on MongoDB support. It offers robust connection management, an intuitive API, and simplified CRUD operations.

Readme

Idae Database Library

Idae Database Library is a flexible, type-safe, event-driven database abstraction for Node.js and TypeScript. It supports MongoDB, MySQL, ChromaDB, PouchDB, SQLite, and PostgreSQL with a unified API, event hooks, and singleton connection management.

Features

  • Multi-Database Support: MongoDB, MySQL, ChromaDB, PouchDB, SQLite, PostgreSQL
  • Event-driven CRUD: Pre/post/error hooks on all operations
  • Type Safety: Full TypeScript generics, strict mode
  • Singleton Pattern: One connection per URI+DbType
  • Adapter Pattern: Easily extend to new databases
  • Auto-increment: Native for MongoDB, extensible for others
  • Transaction Support: Native in MongoDB/MySQL

Supported Adapters

| DbType | Adapter Class | Peer Dependency | |-------------- |----------------------|-----------------| | MONGODB | MongoDBAdapter | mongodb | | MYSQL | MySQLAdapter | mysql2 | | CHROMADB | ChromaDBAdapter | chromadb | | POUCHDB | PouchDBAdapter | pouchdb | | SQLITE | SQLiteAdapter | sqlite3 | | POSTGRESQL | PostgreSQLAdapter | pg |

Installation

Install the core library and the peer dependencies for your database(s):

pnpm add @medyll/idae-db
# For MongoDB:
pnpm add mongodb
# For MySQL:
pnpm add mysql2
# For ChromaDB:
pnpm add chromadb
# For PouchDB:
pnpm add pouchdb
# For SQLite:
pnpm add sqlite3
# For PostgreSQL:
pnpm add pg

Quick Start

1. Initialize a Database

import { IdaeDb } from '@medyll/idae-db';
import { DbType } from '@medyll/idae-db/lib/@types/types';

const db = IdaeDb.init('mongodb://localhost:27017', {
    dbType: DbType.MONGODB,
    dbScope: 'app',
});
await db.db('app');

2. Define a Model

interface User {
    iduser: number;
    name: string;
    email: string;
    age: number;
}

3. CRUD Operations

const users = db.collection<User>('user');
const newUser = await users.create({ name: 'Alice', email: '[email protected]', age: 25 });
const found = await users.findOne({ query: { email: '[email protected]' } });
await users.update(found.iduser, { age: 26 });
await users.deleteById(found.iduser);

4. Event Hooks

users.registerEvents({
    create: {
        pre: (data) => console.log('Creating:', data),
        post: (result, data) => console.log('Created:', result),
        error: (err) => console.error(err)
    }
});

Adapter Usage Examples

MongoDB

const mongoDb = IdaeDb.init('mongodb://localhost:27017', { dbType: DbType.MONGODB });
await mongoDb.db('app');
const users = mongoDb.collection<User>('user');

MySQL

const mysqlDb = IdaeDb.init('mysql://user:password@localhost:3306', { dbType: DbType.MYSQL });
await mysqlDb.db('app');
const users = mysqlDb.collection<User>('user');

ChromaDB

const chromaDb = IdaeDb.init('chromadb://localhost:8000', { dbType: DbType.CHROMADB });
await chromaDb.db('app');
const items = chromaDb.collection<any>('item');

PouchDB

const pouchDb = IdaeDb.init('pouchdb://./my-pouchdb-folder', { dbType: DbType.POUCHDB });
await pouchDb.db('app');
const docs = pouchDb.collection<any>('doc');

SQLite

const sqliteDb = IdaeDb.init('sqlite://./mydb.sqlite', { dbType: DbType.SQLITE });
await sqliteDb.db('app');
const users = sqliteDb.collection<User>('user');

PostgreSQL

const pgDb = IdaeDb.init('postgresql://user:password@localhost:5432/mydb', { dbType: DbType.POSTGRESQL });
await pgDb.db('app');
const users = pgDb.collection<User>('user');

Event System

All CRUD methods emit pre:method, post:method, and error:method events. Register listeners with registerEvents:

users.registerEvents({
    create: {
        pre: (data) => console.log('Creating:', data),
        post: (result, data) => console.log('Created:', result),
        error: (err) => console.error(err)
    },
    update: {
        pre: (id, data) => console.log('Updating:', id, data),
        post: (result, id, data) => console.log('Updated:', result),
        error: (err) => console.error(err)
    }
});

Type Safety

  • All models are fully typed (T extends object)
  • Query params: IdaeDbParams<T>
  • MongoDB filters: use Filter<T>
  • ID field: MongoDB uses _id or custom via autoIncrementFormat

Singleton & Connection Management

  • One instance per URI+DbType
  • Use .closeAllConnections() to gracefully close all DBs:
await db.closeAllConnections();

Scripts

pnpm run test            # Run all tests
pnpm run build           # Build the package
pnpm run lint            # Lint code
pnpm run format          # Format code

License

MIT License import { DbType } from './lib/@types/types.js';

const pouchDb = IdaeDb.init('pouchdb://./my-pouchdb-folder', { dbType: DbType.POUCHDB });


#### SQLite

```typescript
import { IdaeDb } from './lib/idaeDb.js';
import { DbType } from './lib/@types/types.js';

const sqliteDb = IdaeDb.init('sqlite://./mydb.sqlite', {
    dbType: DbType.SQLITE
});

PostgreSQL

import { IdaeDb } from './lib/idaeDb.js';
import { DbType } from './lib/@types/types.js';

const pgDb = IdaeDb.init('postgresql://user:password@localhost:5432/mydb', {
    dbType: DbType.POSTGRESQL
});

Create a Connection

Create a connection to the database:

await mongoDb.db('app');
await mysqlDb.db('app');

Define a Model

Define a model interface:

interface User {
    iduser: number;
    name: string;
    email: string;
    age: number;
}

Register Event Listeners

Register event listeners for various operations:

const usersCollection = mongoDb.collection<User>('user');

usersCollection.registerEvents<any>({
    findById: {
        pre: (id) => console.log(`About to find document with id: ${id}`),
        post: (result, id) => console.log(`Found document for id ${id}:`, result),
        error: (error) => console.error('Error in findById:', error)
    },
    update: {
        pre: (id, data) => console.log(`About to update document ${id} with:`, data),
        post: (result, id, data) => console.log(`Updated document ${id}:`, result)
    },
    create: {
        pre: (data) => console.log(`About to create document with:`, data),
        post: (data, result) => console.log(`Created document `, data, result)
    }
});

CRUD Operations

Perform CRUD operations:

MongoDB

// Create a new user
const newUser = await usersCollection.create({
    name: 'John Doe',
    email: '[email protected]',
    age: 30
});

// Find a user by email
const user = await usersCollection.findOne({ query: { email: '[email protected]' } });

// Update a user's age
const updateResult = await usersCollection.update(user.iduser, { age: 31 });

// Find users with age greater than 25
const users = await usersCollection.find({
    query: { age: { $gt: 25 } },
    sortBy: 'name:asc',
    limit: 10
});

// Delete a user by ID
const deleteResult = await usersCollection.deleteById(5);

MySQL

const usersCollection = mysqlDb.collection<User>('user');

// Create a new user
const newUser = await usersCollection.create({
    name: 'John Doe',
    email: '[email protected]',
    age: 30
});

// Find a user by email
const user = await usersCollection.findOne({ query: { email: '[email protected]' } });

// Update a user's age
const updateResult = await usersCollection.update(user.iduser, { age: 31 });

// Find users with age greater than 25
const users = await usersCollection.find({
    query: { age: { $gt: 25 } },
    sortBy: 'name:asc',
    limit: 10
});

// Delete a user by ID
const deleteResult = await usersCollection.deleteById(5);

Close Connections

Close all connections when done:

await mongoDb.closeAllConnections();
await mysqlDb.closeAllConnections();

License

This project is licensed under the MIT License.