blob: 68ca18a0aac2ee682f49297c3ebcd7e7b55bacd6 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
* The store allows key-value store for string keys and any value.
*/
var localForage = require('localforage');
var stripFunctions = require('./strip-functions');
var _ = require('lodash');
module.exports = {
hasValue: hasValue,
setValue: setValue,
getValue: getValue,
removeValue: removeValue,
getKeysWithPrefix: getKeysWithPrefix
};
/*
* Given a string identifier, return a promise indicating if the key exists.
*/
function hasValue(key) {
return localForage.getItem(key).then(function(value) {
return value !== null;
});
}
/*
* Given a string identifier and any value, strip functions out of the value
* and put it into the store. Returns a promise.
*/
function setValue(key, value) {
return localForage.setItem(key, stripFunctions(value));
}
/*
* Given a string identifier, return a promise with the return value.
*/
function getValue(key) {
return localForage.getItem(key);
}
/*
* Given a string identifier, return a promise that removes the value.
*/
function removeValue(key) {
return localForage.removeItem(key);
}
/*
* Given a string prefix, return a promise with the corresponding keys.
* TODO(alexfandrianto): May be inefficient depending on backend. Avoid using.
* Upgrade to glob once the store is ready.
*/
function getKeysWithPrefix(key) {
return localForage.keys().then(function(keys) {
return _.filter(keys, function(candidate) {
return candidate.indexOf(key) === 0;
});
});
}