@onlydann/database
v1.2.0
Published
A local encrypted database for easy tests
Downloads
9
Readme
Save your data locally with easy database system!
Database System written with TypeScript
All data is encrypted in model files
Events are Available!!
New Filter IN Methods
$in, $nin
$ Installation
npm install @onlydann/database
Or
yarn add @onlydann/database
Setup
import { createDatabase } from "@onlydann/database";
// setuping folder
const db = await createDatabase("../databaseFolder");
// it is more secure, use your custom passphrase
const dbWithCustomPassphrase = await createDatabase({
enc_pass: "My Passphrase",
path: "../databaseFolder",
});
Creating schema and model
// JavaScript
import { Schema, Value, Model } from "@onlydann/database";
const userSchema = new Schema({
username: new Value("string", {unique: true}),
password: new Value("string"),
age: new Value("number", {default: 18}),
tags: new Value("array", {default: []}),
endsIn: new Value("date"), {default: () => new Date()}
});
const UserModel = new Model("users", userSchema);
export default UserModel;
// TypeScript
import { Schema, Value, Model } from "@onlydann/database";
interface User {
_id: string;
_createdAt: Date;
username: string;
password: string;
age?: number;
tags?: string[];
endsIn?: Date
}
const userSchema = new Schema<User>({
username: new Value("string", {unique: true}),
password: new Value("string"),
age: new Value("number", {default: 18}),
tags: new Value("array", {default: []}),
endsIn: new Value("date"), {default: () => new Date()}
});
const UserModel = new Model("users", userSchema);
export default UserModel;
Default (Reserved) properties
There are some default properties extended from document
You can specify them in interface with other props, Schema will Omit them
// Unique string of symbols for database
_id: string;
// Document creation date
_createdAt: Date;
Filter and Update
Filter
First argument is filter object, so we can do..
// all props are the same as filter object
await users.get({ username: "Dann" });
// if any prop exists in document
await users.all({ $or: { username: "Dann", age: 20 } });
// callback filter function, first arg is document, must return boolean
await users.delete((doc) => doc.tags.length > 10);
// if any doc's username in array
await users.get({ username: { $in: ["Dann", "Meri"] } });
// if any doc's username NOT in array
await users.get({ username: { $nin: ["Dann", "Meri"] } });
Update
Model.update methods are using Update object as second argument
await users.update(filter, { $set: { username: "Aren" } });
// also you can use -number
await users.update(filter, { $inc: { age: 1 } });
// push works only if property is an array
await users.update(filter, { $push: { tags: "developer" } });
Model
Register a models
await db.registerModels(UserModel);
// await db.registerModels(UserModel, MessageModel, AnyModel, ...);
Methods
it takes one argument
// others props are optional and have default values
const userDocument = await users.create({
username: "Dann",
password: "1234",
});
it takes one argument - array
const userDocument = await users.createAll([
{
username: "Dann",
password: "1234",
},
{ username: "Meri", password: "cuteOne" },
]);
Get all documents
// all
const userDocuments = await users.all();
See Filter
// also you can use Filter as first argument
const userDocuments = await users.all(filter);
Get one document
See Filter
// filter
const userDocument = await users.get(filter);
Get one document with its _id
const userDocument = await users.getById("0BQae1vE%A%Ie@X1r%5su3O5YS7^45");
Delete one document
See Filter
await users.delete(filter);
Delete one document with its _id
await users.deleteById("0BQae1vE%A%Ie@X1r%5su3O5YS7^45");
Delete all documents
await users.deleteAll();
See Filter
// filter
await users.deleteAll(filter);
Update one document
const updatedUser = await users.update(filter, update);
Update all documents
const updatedUsersArray = await users.updateAll(filter, update);
Document
Document class implements Reserved Properties
Methods
Delete current document
await userDocument.delete();
Clone current document
await userDocument.clone();
we are useing this method for saving document in base
So it's not usable
const userJson = userDocument.toJson();
Events
Each Model now has Event System
There are 3 types of events
create, delete, update
// create
users.on("create", (doc) => {
// created document
console.log(doc._id);
});
users.on("delete", (doc) => {
// deleted document
console.log(doc._id);
});
users.on("update", (oldDoc, newDoc) => {
// newDoc is the updated version of oldDoc
console.log(oldDoc, newDoc);
});
Feature Updates
- Nested object filtering and updating