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));
 |