98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
(function (exports) {
|
|
'use strict';
|
|
|
|
var CannedStorage;
|
|
var Oauth3 = (exports.OAUTH3 || require('./oauth3'));
|
|
|
|
function create(opts) {
|
|
var myInstance = {};
|
|
var conf = {
|
|
prefix: opts.namespace + '.'
|
|
};
|
|
|
|
Object.keys(CannedStorage.api).forEach(function (key) {
|
|
myInstance[key] = function () {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
args.unshift(conf);
|
|
return CannedStorage.api[key].apply(null, args);
|
|
};
|
|
});
|
|
|
|
return myInstance;
|
|
}
|
|
|
|
var api = {
|
|
init: function (/*conf*/) {
|
|
// noop, reserved for future use
|
|
return Oauth3.PromiseA.resolve();
|
|
}
|
|
, get: function (conf, key) {
|
|
var val;
|
|
|
|
try {
|
|
val = JSON.parse(localStorage.getItem(conf.prefix + key) || null);
|
|
} catch(e) {
|
|
console.error("couldn't parse " + conf.prefix + key, localStorage.getItem(conf.prefix + key));
|
|
localStorage.removeItem(conf.prefix + key);
|
|
val = null;
|
|
}
|
|
|
|
// just because sometimes it happens...
|
|
if ('undefined' === val || 'null' === val) {
|
|
console.warn("got undefined for " + conf.prefix + key);
|
|
val = null;
|
|
}
|
|
|
|
return val && Oauth3.PromiseA.resolve(val) || Oauth3.PromiseA.reject();
|
|
}
|
|
, set: function (conf, key, val) {
|
|
try {
|
|
localStorage.setItem(conf.prefix + key, JSON.stringify(val));
|
|
return Oauth3.PromiseA.resolve();
|
|
} catch(e) {
|
|
console.error("couldn't stringify " + conf.prefix + key, val);
|
|
return Oauth3.PromiseA.reject(e);
|
|
}
|
|
}
|
|
, remove: function (conf, key) {
|
|
localStorage.removeItem(conf.prefix + key);
|
|
return Oauth3.PromiseA.resolve();
|
|
}
|
|
, clear: function (conf, account) {
|
|
var re;
|
|
var keys = [];
|
|
var i;
|
|
var key;
|
|
|
|
re = new RegExp('^'
|
|
// See http://stackoverflow.com/a/6969486/151312 for regexp escape explanation
|
|
+ conf.prefix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
|
|
+ (account || '')
|
|
);
|
|
|
|
for (i = 0; i < localStorage.length; i += 1) {
|
|
key = localStorage.key(i);
|
|
if (re.test(key) && !/\.(dev|developer)\./.test(key)) {
|
|
keys.push(key);
|
|
}
|
|
}
|
|
|
|
keys.forEach(function (key) {
|
|
localStorage.removeItem(key);
|
|
});
|
|
|
|
return Oauth3.PromiseA.resolve();
|
|
}
|
|
};
|
|
|
|
CannedStorage = {
|
|
create: create
|
|
, api: api
|
|
};
|
|
exports.CannedStorage = CannedStorage.CannedStorage = CannedStorage;
|
|
|
|
if ('undefined' !== typeof module) {
|
|
module.exports = CannedStorage;
|
|
}
|
|
}('undefined' !== typeof exports ? exports : window));
|