Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alekseykulikov/storage
Asynchronous browser storage with multiple back-ends (IndexedDB, WebSQL, localStorage)
https://github.com/alekseykulikov/storage
indexeddb localforage localstorage websql
Last synced: about 1 month ago
JSON representation
Asynchronous browser storage with multiple back-ends (IndexedDB, WebSQL, localStorage)
- Host: GitHub
- URL: https://github.com/alekseykulikov/storage
- Owner: alekseykulikov
- License: mit
- Created: 2013-08-29T11:35:43.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2015-03-14T17:38:15.000Z (over 9 years ago)
- Last Synced: 2024-11-10T13:22:18.707Z (about 1 month ago)
- Topics: indexeddb, localforage, localstorage, websql
- Language: JavaScript
- Homepage:
- Size: 373 KB
- Stars: 606
- Watchers: 19
- Forks: 20
- Open Issues: 2
-
Metadata Files:
- Readme: Readme.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - alekseykulikov/storage - Asynchronous browser storage with multiple back-ends (IndexedDB, WebSQL, localStorage) (others)
README
# Storage [![Build Status](https://travis-ci.org/alekseykulikov/storage.png?branch=master)](https://travis-ci.org/alekseykulikov/storage)
Storage is a functional wrapper around [localForage](https://github.com/mozilla/localForage).
That means it's an asynchronous browser storage with multiple back-ends (IndexedDB, WebSQL, localStorage),
which is built for a better offline experience.The main differences with localForage:
- batch get/set support
- callbacks or promises
- browserify friendly
- simple API inspired by [yields/store](https://github.com/yields/store)
- development mode## Installation
```
$ npm install asyncstorage --save
$ bower install storage
$ component install alekseykulikov/storage
```Standalone build available as [./dist/storage.js](./dist/storage.js).
```html
window.storage('key', fn);
```## Example
```js
// set
storage({ key: 'val', key2: 'val2'}, function(err) {});// get
storage('key', function(err, val) {});
storage(['key', 'key2'], function(err, all) {}); // all.length == 2// count
storage(function(err, count) {}); // count == 2// delete
storage('key', null, function(err) {});
storage(['key', 'key2'], null, function(err) {});
```## API
Each method returns promise, and accepts optional callback.
### storage([key, val, fn])
Main function is facade to get/set/del/count methods. It's inspired by [yields/store](https://github.com/yields/store).
Setting a key to `null` is equivalent to deleting the key via `storage.del(key)`.### storage.get(key, [fn])
Get `key` value.
### storage.get([key1, key2, ..., keyn], [fn])
Get group of values. Callbacks return array of values for each key.
If key does not exist, it returns `null` on this position.### storage.set(key, val, [fn])
Set `key` to `val`.
You can store any kind of data, including [blobs](https://hacks.mozilla.org/2014/02/localforage-offline-storage-improved/).### storage.set({ key1: val1, key2: val2, key3: val3 }, [fn])
Run a batch operation.
Simple way to create, update, remove multiple records.
Use `null` to remove record.```js
// assume we have 2 records
storage.set('foo', 7, fn)
storage.set('bar', ['one', 'two', 'three'], fn);storage.set({
baz: 'val' // create new val
foo: 1000, // update `foo` value
bar: null, // remove `bar`
}, function(err) {});
```### storage.del(key, [fn])
Delete `key`.
### storage.del([key1, key2, ..., keyn], [fn])
Delete a group of keys in one request.
### storage.clear()
Clear storage.
### storage.count()
Count records.
### storage.development
Work with async code console can be unpleasant.
Setup development flag and storage will console.log() results of `get` or `count`.```js
storage.development = true;
storage.set({ foo: 1, bar: 2 });
storage.get(['foo', 'bar']);
// => [1 ,2]
storage.del('bar');
storage.count();
// => 1
// shortcut to: storage.count().then(console.log.bind(console));
```### storage.forage
It gives you access to the localForage instance.
You can use it to configure backend or for advanced methods as `keys` or `iterate`.```js
storage.forage.config({ name: 'my-name' });
if (!window.indexedDB) storage.forage.setDriver(storage.forage.LOCALSTORAGE);storage.forage.keys().then(function(keys) {
console.log(keys);
});
```