Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/allnulled/ranas-db
Easy browser-side database management for IndexedDB.
https://github.com/allnulled/ranas-db
Last synced: 1 day ago
JSON representation
Easy browser-side database management for IndexedDB.
- Host: GitHub
- URL: https://github.com/allnulled/ranas-db
- Owner: allnulled
- Created: 2022-02-05T13:48:05.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-02-13T22:07:15.000Z (almost 3 years ago)
- Last Synced: 2024-09-25T12:26:17.278Z (about 2 months ago)
- Language: JavaScript
- Size: 244 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# RanasDB
Easy browser-side database management for IndexedDB.
# What is `RanasDB`?
`RanasDB`, in the end, is just an interface for the stack:
- `IndexedDB API`: the native HTML5 API.
- `dexie`: the popular wrapper for `IndexedDB`.
- `dexie-relationships`: a `dexie` addon to add relationships.# How to use `ranas-db`?
This piece of code demonstrates how you can use `ranas-db` in 7 easy steps:
```js
// 1. Import the package:
const RanasDB = require("ranas-db");// 2. (Optionally) Delete previous data and schema:
await RanasDB.dropDatabaseIfExists("My_first_database");// 3. Connect (= create + initialize) to your database, and define all versions:
const db = await RanasDB.connect("My_first_database", [
[
{
users: "++id,&name,password,&email,created_at,updated_at,picture_profile,personal_data,description",
groups: "++id,&name,administrator,description,details,tags,created_at,updated_at",
permissions: "++id,&name,description,details,tags,created_at,updated_at",
},
function() {}
], [
{
permissions_of_user: "++id,id_user -> users.id,id_permission -> permissions.id",
permissions_of_group: "++id,id_group -> groups.id,id_permission -> permissions.id",
groups_of_user: "++id,id_user -> users.id,id_group -> groups.id",
},
function() {}
]
], {
debug: console.log // this is for debugging CRUD methods by console
});// 4. Insert data:
const userXId = await db.insert("users", { name: "userX", password: "x", email: "[email protected]" });
const userYId = await db.insert("users", { name: "userY", password: "y", email: "[email protected]" });
const userZId = await db.insert("users", { name: "userZ", password: "z", email: "[email protected]" });// 5. Update data:
await db.update("users", userXId, { name: "user X modified!" });
await db.update("users", userYId, { name: "user Y modified!" });
await db.update("users", userZId, { name: "user Z modified!" });// 6. Delete data:
await db.delete("users", userYId);// 7. Select data:
const allUsers = await db.select("users");if(allUsers.length !== 2) {
throw new Error("Users count should be 2, not " + allUsers.length);
}
```# Why?
To make `IndexedDB` work, easier (so, `dexie`), with references (that is, `dexie-relationships`), and a simple but flexible enough API.
# License
No. **#NoLicense**.
# Changes
See changes on CHANGELOG.md file.