function onError(error) {
return Promise.reject(error);
}
/**
* Class used by an extension to store your data in {@link external:localStorage}.
*/
class Store {
/**
* @hideconstructor
*/
constructor(connection) {
this._connection = connection;
}
/**
* Gets the value of key
* @param {string} key Key of the stored data
* @example extension.store.get('key').then((value) => console.log(value)) // will log value for the given key
* @return {external:Promise}
*/
get(key) {
if (!key || typeof key !== 'string') { throw new Error('Kindly provide valid parameters'); }
return this._connection.sendToParent('store', { action: 'get', key })
.then(event => Promise.resolve(event.data)).catch(onError);
}
/**
* Gets an object with all the stored key-value pairs.
* @example extension.store.getAll().then((obj) => obj)
* @return {external:Promise}
*/
getAll() {
return this._connection.sendToParent('store', { action: 'getAll' })
.then(({ data = {} }) => Promise.resolve(data)).catch(onError);
}
/**
* Sets the value of a key
* @param {string} key Key of the stored data.
* @param {*} value Data to be stored.
* @example extension.store.set('key', 'value').then((success) => console.log(success)) // will log ‘true’ when value is set
* @return {external:Promise}
*/
set(key, value) {
if (!key || !value || typeof key !== 'string') {
throw new Error('Kindly provide valid parameters');
}
return this._connection.sendToParent('store', { action: 'set', key, value })
.then(() => Promise.resolve(true)).catch(onError);
}
/**
* Removes the value of a key
* @param {string} key Key of the data to be removed from the store
* @example extension.store.remove('key').then((success) => console.log(success)) // will log ‘true’ when value is removed
* @return {external:Promise}
*/
remove(key) {
if (!key || typeof key !== 'string') { throw new Error('Kindly provide valid parameters'); }
return this._connection.sendToParent('store', { action: 'remove', key })
.then(() => Promise.resolve(true)).catch(onError);
}
/**
* Clears all the stored data of an extension
* @example extension.store.clear().then((success) => console.log(success)) // will log ‘true’ when values are cleared
* @return {external:Promise}
*/
clear() {
return this._connection.sendToParent('store', { action: 'clear' })
.then(() => Promise.resolve(true)).catch(onError);
}
}
export default Store;