Javascript Storage Manager
A library that makes the WebStorage easy to use: localStorage
, sessionStorage
and Cookies
(sessionStorage
and Cookies
are in progress: #2, #3).
![npm bundle size](https://img.shields.io/bundlephobia/min/js-storage-manager.svg)
Install
bower
$ bower install js-storage-manager
npm
$ npm install js-storage-manager
Git
$ git clone https://github.com/bjoern-hempel/js-storage-manager.git
or
$ git clone git@github.com:bjoern-hempel/js-storage-manager.git
Getting started
bower
$ mkdir webproject && cd webproject
$ bower install js-storage-manager
$ vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>A simple js-storage-manager example</title>
<script src="bower_components/js-storage-manager/dist/storage-manager.min.js"></script>
</head>
<body>
<script>
var sm = new StorageManager('namespace');
sm.set('data', [{id: 123, name: 'Name 1'}, {id: 123, name: 'Name 2'}]);
document.write(JSON.stringify(sm.get('data')));
</script>
</body>
</html>
npm
The direct way (the old javascript way)
$ mkdir webproject && cd webproject
$ npm install js-storage-manager
$ vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>A simple js-storage-manager example</title>
<script src="node_modules/js-storage-manager/dist/storage-manager.min.js"></script>
</head>
<body>
<script>
var sm = new StorageManager('namespace');
sm.set('data', [{id: 123, name: 'Name 1'}, {id: 123, name: 'Name 2'}]);
document.write(JSON.stringify(sm.get('data')));
</script>
</body>
</html>
The webpack way (the modern javascript way)
$ mkdir webproject && cd webproject
$ vi package.json
{
"name": "js-storage-manager-test",
"version": "1.0.0",
"description": "",
"private": true,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --config webpack.config.js",
"start:dev": "webpack-dev-server"
},
"keywords": [],
"author": "",
"license": "MIT"
}
$ npm install js-storage-manager --save
$ npm install webpack --save-dev
$ npm install webpack-cli --save-dev
$ npm install webpack-dev-server --save-dev
$ mkdir src
$ vi src/index.js
let StorageManager = require('js-storage-manager')
let sm = new StorageManager('namespace')
function component() {
let element = document.createElement('div');
sm.set('data', [{id: 123, name: 'Name 1'}, {id: 123, name: 'Name 2'}]);
element.innerHTML = JSON.stringify(sm.get('data'));
return element;
}
document.body.appendChild(component());
$ vi webpack.config.js
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
},
watch: true,
mode: 'development',
devServer: {
contentBase: path.join(__dirname, 'dist'),
compress: true,
port: 8080
}
};
$ mkdir dist
$ vi dist/index.html
<!doctype html>
<html>
<head>
<title>A simple js-storage-manager example</title>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
$ npm run start:dev
All your changes are now under observation and will automatically be re-rendered in the /dist
directory. Make the changes in /src
and paste them directly into your browser.
Open your browser at: http://localhost:8080 (to see the results)
Git
$ mkdir webproject && cd webproject
$ mkdir vendor && cd vendor
$ git clone https://github.com/bjoern-hempel/js-storage-manager.git
$ cd ..
$ vi index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>A simple js-storage-manager example</title>
<script src="vendor/js-storage-manager/dist/storage-manager.min.js"></script>
</head>
<body>
<script>
var sm = new StorageManager('namespace');
sm.set('data', [{id: 123, name: 'Name 1'}, {id: 123, name: 'Name 2'}]);
document.write(JSON.stringify(sm.get('data')));
</script>
</body>
</html>
The next steps
How to use the StorageManager in the easiest way
var sm = new StorageManager('namespace');
var data_initial = [{id: 1, name: 'Name 1'}, {id: 2, name: 'Name 2'}];
sm.set('data', data_initial);
var data_from_web_storage = sm.get('data');
How to use multiple namespaces
var namespace_1 = 'namespace1';
var namespace_2 = 'namespace2';
var sm_1 = new StorageManager(namespace_1);
var sm_2 = new StorageManager(namespace_2);
var data_initial_1 = [{id: 1, name: 'Name 1'}, {id: 2, name: 'Name 2'}];
var data_initial_2 = [{id: 3, name: 'Name 3'}, {id: 4, name: 'Name 4'}];
sm.set('data', data_initial_1);
sm.set('data', data_initial_2);
var data_from_web_storage_1 = sm_1.get('data');
var data_from_web_storage_2 = sm_2.get('data');
How to manage the storage yourself
var sm = new StorageManager('namespace');
var data_initial = [{id: 1, name: 'Name 1'}, {id: 2, name: 'Name 2'}];
var storage = sm.getStorage();
storage.data = data_initial;
sm.setStorage(storage)
How to let the StorageManager automatically save changes to the storage data object in web storage
var sm = new StorageManager('namespace');
var data_initial = [{id: 1, name: 'Name 1'}, {id: 2, name: 'Name 2'}];
var observable = true;
var storage = sm.getStorage(observable);
storage.data = data_initial;
How to create and use a queue list
Attention: This area is under revision. See #1
var sm = new StorageManager('namespace');
var queue_data_1 = {[id: 1, name: 'Name 1']};
var queue_data_2 = {[id: 2, name: 'Name 2']};
sm.initQueue();
sm.pushQueue(queue_data_1);
sm.pushQueue(queue_data_2);
var number_of_queue_items = sm.getNumberOfQueuesItems();
var queue = sm.getQueue();
var next_queue_item = sm.getNextQueueItem();
var next_queue_item = ms.deleteNextQueueItem();
How to use your own queue namespace
Attention: This area is under revision. See #1
var sm = new StorageManager('namespace');
var queue_data_1 = {[id: 1, name: 'Name 1']};
var queue_data_2 = {[id: 2, name: 'Name 2']};
var my_queue_namespace = 'my_queue'
sm.initQueue(my_queue_namespace);
sm.pushQueue(queue_data_1, my_queue_namespace);
sm.pushQueue(queue_data_2, my_queue_namespace);
var number_of_queue_items = sm.getNumberOfQueuesItems(my_queue_namespace);
var queue = sm.getQueue(my_queue_namespace);
var next_queue_item = sm.getNextQueueItem(my_queue_namespace);
var next_queue_item = sm.deleteNextQueueItem(my_queue_namespace);
How to get the LocalStorage area completely managed by the StorageManager
var sm = new StorageManager('namespace');
var local_storage_managed_by_sm = sm.getLocalStorage();
Maintenance
- Checkout the repository
$ git clone git@github.com:bjoern-hempel/js-storage-manager.git && cd js-storage-manager
$ npm install
- Extend, fix bugs in classes below
/src
folder. - Write more tests below the
/test
folder. - Run the tests.
$ npm test
or
$ npm run test:unit
- Build the
/dist
files
$ npm run build
- Commit your changes
$ git add ...
$ git commit -m "my bugfixes" .
$ git push
- Change the version number
$ vi package.json
...
"version": "0.0.14",
...
$ git tag v0.0.14
$ git push origin v0.0.14
- Publish to npm
$ npm publish
- Create Release
$ gren release
Adapt the changelog text to github if necessary: changelog. Show all commits:
$ git log --oneline --decorate
- Update CHANGELOG.md
$ gren changelog --override
A. Authors
B. Changelog
Changes are tracked as GitHub releases or in reverse order here.
C. License
This library is licensed under the MIT License - see the LICENSE.md file for details