@onlydann/database

1.2.0 • Public • Published

Save your data locally with easy database system!

Database System written with TypeScript

All data is encrypted in model files

Events are Available!!

See Events

New Filter IN Methods

$in, $nin

See Filter IN Methods

$ 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

create Create a document

it takes one argument

// others props are optional and have default values
const userDocument = await users.create({
  username: "Dann",
  password: "1234",
});
createAll Create documents

it takes one argument - array

const userDocument = await users.createAll([
  {
    username: "Dann",
    password: "1234",
  },
  { username: "Meri", password: "cuteOne" },
]);
all

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

Get one document

See Filter

// filter
const userDocument = await users.get(filter);
getById

Get one document with its _id

const userDocument = await users.getById("0BQae1vE%A%Ie@X1r%5su3O5YS7^45");
delete

Delete one document

See Filter

await users.delete(filter);
deleteById

Delete one document with its _id

await users.deleteById("0BQae1vE%A%Ie@X1r%5su3O5YS7^45");
deleteAll

Delete all documents

await users.deleteAll();

See Filter

// filter
await users.deleteAll(filter);
update

Update one document

See Filter and Update

const updatedUser = await users.update(filter, update);
updateAll

Update all documents

See Filter and Update

const updatedUsersArray = await users.updateAll(filter, update);

Document

Document class implements Reserved Properties

Methods

delete

Delete current document

await userDocument.delete();
clone

Clone current document

await userDocument.clone();
toJson

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

Package Sidebar

Install

npm i @onlydann/database

Weekly Downloads

0

Version

1.2.0

License

ISC

Unpacked Size

36.2 kB

Total Files

19

Last publish

Collaborators

  • seadann