https://github.com/rayjune/indexeddb-crud
a module which packs complex indexedDB CRUD methods to a friendly simple interface
https://github.com/rayjune/indexeddb-crud
Last synced: 18 days ago
JSON representation
a module which packs complex indexedDB CRUD methods to a friendly simple interface
- Host: GitHub
- URL: https://github.com/rayjune/indexeddb-crud
- Owner: RayJune
- License: mit
- Created: 2017-10-01T01:48:05.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-25T01:49:19.000Z (about 7 years ago)
- Last Synced: 2024-10-10T20:51:57.774Z (7 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/indexeddb-crud
- Size: 201 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
- License: LICENSE
Awesome Lists containing this project
README
# indexedDB-CRUD
indexedDB-CRUD packs obscure indexedDB CRUD methods to a really friendly succinct interface. And offer **multi-objectStore CRUD handler**.
If you want to operate **one or more indexedDB objectStore**, just `DB.open(config).then(successCallback).catch()`, and *you'll get a indexedDB-crud handler* when its `DB.open` successed.
Hope you keep in mind that:
* `config`'s **format should be correct**
* if you not input `storeName` explicitly in API, **your config's first `sotreName` will be the default storeName**
* indexedDB object store can *only hold JavaScript objects*. The objects *must have a property with the same name as the key path*## Installation
```npm scripts
npm install indexeddb-crud --saveyarn add indexeddb-crud
```## API Overview
### first step
* [open(config)](https://github.com/RayJune/indexeddb-crud#openconfig)
**Only you open it, you can use these synchronous&asynchronous API**.
### synchronous API:
* [getLength(storeName?)](https://github.com/RayJune/indexeddb-crud#getlengthstorename)
* [getNewKey(storeName?)](https://github.com/RayJune/indexeddb-crud#getnewkeystorename)### asynchronous API
indexeddb-crud support for the ES6 Promises API, so you can use `then` & `catch` carefree.
get:
* [getItem(key, storeName?)](https://github.com/RayJune/indexeddb-crud#getitemkey-storename)
* [getConditionItem(condition, whether, storeName?)](https://github.com/RayJune/indexeddb-crud#getconditionitemcondition-whether-storename)
* [getAll(storeName?)](https://github.com/RayJune/indexeddb-crud#getallstorename)add:
* [addItem(data, storeName?)](https://github.com/RayJune/indexeddb-crud#additemdata-storename)
remove:
* [removeItem(key, storeName?)](https://github.com/RayJune/indexeddb-crud#removeitemkey-storename)
* [removeConditionItem(condition, whether, storeName?)](https://github.com/RayJune/indexeddb-crud#removeconditionitemcondition-whether-storename)
* [clear(storeName?)](https://github.com/RayJune/indexeddb-crud#clearstorename)update:
* [updateItem(newData, storeName?)](https://github.com/RayJune/indexeddb-crud#updateitemnewdata-storename)
## usage
### import
```javascript
var DB = require('indexeddb-crud');// or ES6
import DB from 'indexeddb-crud';
```### API
#### open(config)
* initialData is *Optional*, and it's a array object
* about initialData, `key = 0` is just for demo, we only use `key >= 1`, so we usually begain at `key = 1`
* your config's structure should like this, `you must have a key(number type)`, in this following code key is id)```javascript
config = {
"name": '',
"version": '',
"storeConfig": [
{
"storeName": '',
"key": '',
"storeConfig": [
// must have key property, number type
]
},
// one or more storeConfig object
]
}
```correct config just like this:
```javascript
var DBConfig = {
"name": "JustToDo",
"version": 23,
"storeConfig": [
{
"storeName": "list",
"key": "id",
"initialData": [
{ "id": 0, "event": "JustDemo", "finished": true } // just for demo, not actual use
]
}
]
};
```If you need more than 1 ObjectStore:
```javascript
var DBConfig = {
"name": "JustToDo",
"version": 23,
"storeConfig": [
{
"storeName": "list",
"key": "id",
"initialData": [
{ "id": 1, "event": "JustDemo", "finished": true }
]
},
{
"storeName": "aphorism",
"key": "id",
"initialData": [
{
"id": 1,
"content": "You're better than that"
},
{
"id": 2,
"content": "Yesterday You Said Tomorrow"
}
]
}
]
}
```e.g. successCallback:
```javascript
function addEvents() {
querySelector('#test').addEventlistener('click', clickHandler, false);
}
function clickHandler() {
console.log('test');
}DB.open(config).then(addEvents);
```#### getLength(storeName?)
```javascript
// If you have only 1 objectSotre, suggest use the default storeName
var randomIndex = Math.floor(DB.getLength() * Math.random());// or pass storeName explicitly
var storeName = 'list';
var randomIndex = Math.floor(DB.getLength(storeName) * Math.random());
```#### getNewKey(storeName?)
```javascript
// If you have only 1 objectSotre, suggest use the default storeName
DB.getNewKey();// or pass storeName explicitly
var storeName = 'list';
DB.getNewKey(storeName);
```You will need it in `addItem()`.
#### getItem(key, storeName?)
```javascript
function doSomething(data) {
console.log(data);
}// If you have only 1 objectSotre, suggest use the default storeName
DB.getItem(1).then(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.getItem(1, storeName).then(doSomething);
```* the key should be a number, which matched to db's id
#### getConditionItem(condition, whether, storeName?)
* whether is `Boolean` type
* `condition` should be a **boolean-condition**, for example:```javascript
var DBConfig = {
"name": "JustToDo",
"version": 23,
"storeConfig": [
{
"storeName": "list",
"key": "id",
"initialData": [
{ "id": 0, "event": "JustDemo", "finished": true } // just for demo, not actual use
]
}
]
};// If you have only 1 objectSotre, suggest use the default storeName
DB.getConditionItem('finished', false).then(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.getConditionItem('finished', false,storeName).then(doSomething);
```#### getAll(storeName?)
```javascript
function doSomething(dataArr) {
console.log(dataArr);
}// If you have only 1 objectSotre, suggest use the default storeName
DB.getAll(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.getAll(doSomething, storeName);
```#### addItem(data, storeName?)
* data's structure should at least contains number type key.
e.g.
```javascript
var data = {
"id": DB.getNewKey(storeName),
"event": 'play soccer',
"finished": false
};// If you have only 1 objectSotre, suggest use the default storeName
DB.addItem(data);// or pass storeName explicitly
var storeName = 'list';
DB.addItem(data, storeName);
```#### removeItem(key, storeName?)
* the **key should be number type**, which matched to db's key.
```javascript
// If you have only 1 objectSotre, suggest use the default storeName
DB.removeItem(1).then(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.removeItem(1, storeName).then(doSomething);
```#### removeConditionItem(condition, whether, storeName?)
* whether is Boolean
* `condition` should be a boolean-condition, for example:```javascript
var DBConfig = {
"name": "JustToDo",
"version": 23,
"storeConfig": [
{
"storeName": "list",
"key": "id",
"initialData": [
{ "id": 0, "event": "JustDemo", "finished": true } // just for demo, not actual use
]
}
]
};// If you have only 1 objectSotre, suggest use the default storeName
DB.removeConditionItem('true').then(successCallback);// or pass storeName explicitly
var storeName = 'list';
DB.removeConditionItem('true', storeName).then(successCallback);
```#### clear(storeName?)
```javascript
// If you have only 1 objectSotre, suggest use the default storeName
DB.clear().then(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.clear(storeName).then(doSomething);
```#### updateItem(newData, storeName?)
```javascript
var DBConfig = {
"name": "JustToDo",
"version": 23,
"storeConfig": [
{
"storeName": "list",
"key": "id",
"initialData": [
{ "id": 0, "event": "JustDemo", "finished": true } // just for demo, not actual use
]
}
]
};// If you have only 1 objectSotre, suggest use the default storeName
DB.updateItem(newData).then(doSomething);// or pass storeName explicitly
var storeName = 'list';
DB.updateItem(newData, storeName).then(doSomething);
```## example
a simple todolist web-app, storage data in indexedDB (use indexeddb-crud to handler 2 different objectStores): https://github.com/RayJune/JustToDo/blob/gh-pages/src/scripts/main.js
## author
[RayJune](https://www.rayjune.me/about): a CS university student from Fuzhou, Fujian, China
## License
MIT