forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			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)); |