Fuming is a lightweight and efficient database management system built with TypeScript. It simplifies database operations with type safety, robust query handling, and seamless integration into any modern web application.
- π Lightweight & Fast: Minimal overhead with efficient file-based storage
- π TypeScript Support: Full type safety and excellent IDE integration
- π CRUD Operations: Complete set of Create, Read, Update, and Delete operations
- π οΈ Easy Setup: Simple installation and minimal configuration
- π Collection-based: Organize your data in collections, similar to MongoDB
- π Automatic ID Generation: Built-in unique ID generation for documents
npm install fuming
import { connect, collection } from 'fuming';
// Connect to database
const db = await connect('mydb');
// Create a collection
collection.create('users');
// Insert data
await collection.insert('users', {
name: 'John Doe',
email: '[email protected]',
age: 30
});
// Find all documents
const users = collection.find('users');
console.log(users);
Connects to a database. Creates the database directory if it doesn't exist.
const collections = await connect('mydb');
// Returns array of existing collection names
Creates a new collection.
collection.create('users');
Retrieves all documents from a collection.
const users = collection.find('users');
Inserts a new document into a collection. Automatically generates a unique _id
.
await collection.insert('users', {
name: 'Jane Doe',
email: '[email protected]'
});
Updates a document in a collection based on a key-value pair.
await collection.update('users',
{ key: 'email', value: '[email protected]' },
{
name: 'John Smith',
email: '[email protected]'
}
);
Removes a document from a collection based on a key-value pair.
await collection.remove('users', {
key: 'email',
value: '[email protected]'
});
Deletes an entire collection.
await collection.destroy('users');
Each document in a collection automatically receives a unique _id
field when inserted:
{
"_id": "lqr1k3j4x9ab2m5n",
"name": "John Doe",
"email": "[email protected]"
}
import { connect, collection } from 'fuming';
async function initializeDatabase() {
// Connect to database
await connect('userdb');
// Create users collection
collection.create('users');
}
async function addUser(userData: any) {
return await collection.insert('users', userData);
}
async function updateUserEmail(oldEmail: string, newData: any) {
return await collection.update('users',
{ key: 'email', value: oldEmail },
newData
);
}
async function deleteUser(email: string) {
return await collection.remove('users', {
key: 'email',
value: email
});
}
// Usage
initializeDatabase()
.then(() => addUser({
name: 'John Doe',
email: '[email protected]',
role: 'admin'
}))
.catch(console.error);
- All collection operations are file-based and synchronous
- Data is stored in JSON format
- Each database is a directory containing JSON files for each collection
- The database name is stored in the environment variables
- Collection names map directly to JSON files
Contributions are welcome! Please feel free to submit a Pull Request. By contributing to this project, you agree to abide by its terms.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Fuming is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.