Use the Browser-Storage API to store, retrieve user data from localStorage/sessionStorage.
Source code is written by TypeScript.
$ npm i @semibold/browser-storage
// Global
// <script src="./dist/release/browser-storage.js"></script>
// NodeJS Module
const { BrowserStorage } = require("@semibold/browser-storage");
// ES-next Module
import { BrowserStorage } from "@semibold/browser-storage";
More Information: Can I Use localStorage/sessionStorage?
/**
* @param {"localStorage"|"sessionStorage"} areaName
* @param {Object} [options]
* @param {string} [options.prefix = ""] - The prefix of storage keys. Using the
* Browser-Storage API to store, retrieve user data from
* localStorage/sessionStorage will be limited to a certain area.
* e.g: `bs.clear()` will only clear keys prefixed with `media_` which your
* previous set in `options.prefix`.
* @param {Function} [options.parse = (text: string): any => JSON.parse(text)]
* Use this function to parse text before the text returns.
* @param {Function} [options.stringify = (vaule: any): string => JSON.stringify(value)]
* Use this function to stringify value before setting the value.
*/
const bs = new BrowserStorage(areaName, options);
/**
* @typedef {Object} Metadata
* @property {string} name
* @property {string} version
* @property {string} revision
* @property {boolean} production
* @property {string} lastCompiled
* @return {Metadata}
*/
BrowserStorage.metadata;
/**
* @readonly
* @return {Storage} - localStorage/sessionStorage
*/
bs.storage;
/**
* @desc To be able to use storage, we should first verify that
* it is supported and available in the current browsing session
* @return {boolean}
*/
bs.available();
/**
* @desc Gets one or more items from storage.
* @desc A single key to get, list of keys to get, or a dictionary specifying default
* values. An empty list or object will return an empty result object. Pass in
* null to get the entire contents of storage.
*
* @param {null|string|string[]|Object} keys
* @return {Object}
*/
bs.get(keys);
/**
* @desc Gets the amount of space (in bytes) being used by one or more items.
* @desc A single key or list of keys to get the total usage for. An empty list will
* return 0. Pass in null to get the total usage of all of storage.
*
* @param {null|string|string[]} keys
* @return {number} - approximate value
*/
bs.getBytesInUse(keys);
/**
* @desc Sets multiple items.
* @desc An object which gives each key/value pair to update storage with. Any other
* key/value pairs in storage will not be affected.
* @desc The `set()` may throw an exception if the storage is full.
*
* @param {Object} items
*/
bs.set(items);
/**
* @desc Removes one or more items from storage.
* @desc A single key or a list of keys for items to remove.
*
* @param {string|string[]} keys
*/
bs.remove(keys);
/**
* @desc Removes all items from storage.
*/
bs.clear();
const bs1 = new BrowserStorage("localStorage");
const bs2 = new BrowserStorage("localStorage", { prefix: "test." });
if (bs1.available()) {
bs2.set({ abc: 12358 });
const abc1 = bs1.get("test.abc")["test.abc"];
const abc2 = bs2.get(["abc"])["abc"];
console.log(abc1 === abc2); // true
console.log(abc1 === 12358); // true
const value = "should be return this statement";
const __inexistent_value__ = bs1.get({ __inexistent_key__: value }).__inexistent_key__;
console.log(value === __inexistent_value__); // true
}