Comparing version 0.1.2 to 0.2.0
137
index.js
@@ -10,2 +10,6 @@ 'use strict'; | ||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | ||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -17,5 +21,40 @@ | ||
var Storage = (function () { | ||
var StrageDummy = (function () { | ||
function StrageDummy() { | ||
_classCallCheck(this, StrageDummy); | ||
} | ||
_createClass(StrageDummy, [{ | ||
key: 'setSchemeVersion', | ||
value: function setSchemeVersion() {} | ||
}, { | ||
key: 'clear', | ||
value: function clear() {} | ||
}, { | ||
key: 'prefixName', | ||
value: function prefixName() {} | ||
}, { | ||
key: 'getItem', | ||
value: function getItem() {} | ||
}, { | ||
key: 'removeItem', | ||
value: function removeItem() {} | ||
}, { | ||
key: 'setItem', | ||
value: function setItem() {} | ||
}], [{ | ||
key: 'isQuotaExceeded', | ||
value: function isQuotaExceeded() {} | ||
}]); | ||
return StrageDummy; | ||
})(); | ||
var subscribes = {}; | ||
var Storage = (function (_StrageDummy) { | ||
_inherits(Storage, _StrageDummy); | ||
function Storage(_ref) { | ||
var type = _ref.type; | ||
var storage = _ref.storage; | ||
var namespace = _ref.namespace; | ||
@@ -27,15 +66,10 @@ var schemeVersion = _ref.schemeVersion; | ||
var storage = window[type]; | ||
try { | ||
var test = 'test'; | ||
storage.setItem(test, test); | ||
storage.removeItem(test); | ||
} catch (e) { | ||
console.warn('No storage of type ' + type + ' available in this environment.'); | ||
} | ||
this._storage = storage; | ||
this._prefix = namespace ? namespace + '.' : ''; | ||
this._clearOnExceed = clearOnExceed; | ||
this._schemeVersion = this.getItem(SCHEME_VERSION_FIELD_NAME); | ||
this.setSchemeVersion(schemeVersion); | ||
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Storage).call(this)); | ||
_this._storage = storage; | ||
_this._prefix = namespace ? namespace + '.' : ''; | ||
_this._clearOnExceed = clearOnExceed; | ||
_this._schemeVersion = _this.getItem(SCHEME_VERSION_FIELD_NAME); | ||
_this.setSchemeVersion(schemeVersion); | ||
return _this; | ||
} | ||
@@ -79,3 +113,3 @@ | ||
try { | ||
JSON.parse(this._storage.removeItem(this.prefixName(field))); | ||
this._storage.removeItem(this.prefixName(field)); | ||
} catch (e) { | ||
@@ -92,3 +126,3 @@ console.warn(e); | ||
} catch (e) { | ||
if (this.isQuotaExceeded(e)) { | ||
if (Storage.isQuotaExceeded(e)) { | ||
console.warn('Quote is exceeded.'); | ||
@@ -104,2 +138,14 @@ if (this._clearOnExceed) { | ||
} | ||
// TODO make it possible to do multiple subscribes | ||
}, { | ||
key: 'subscribe', | ||
value: function subscribe(fn) { | ||
subscribes[this._prefix] = fn; | ||
} | ||
}, { | ||
key: 'unsubscribe', | ||
value: function unsubscribe() { | ||
delete subscribes[this._prefix]; | ||
} | ||
}], [{ | ||
@@ -129,15 +175,50 @@ key: 'isQuotaExceeded', | ||
return Storage; | ||
})(); | ||
})(StrageDummy); | ||
function createStorage(_ref2) { | ||
var _ref2$type = _ref2.type; | ||
var type = _ref2$type === undefined ? 'localStorage' : _ref2$type; | ||
var _ref2$namespace = _ref2.namespace; | ||
var namespace = _ref2$namespace === undefined ? null : _ref2$namespace; | ||
var _ref2$schemeVersion = _ref2.schemeVersion; | ||
var schemeVersion = _ref2$schemeVersion === undefined ? null : _ref2$schemeVersion; | ||
var _ref2$clearOnExceed = _ref2.clearOnExceed; | ||
var clearOnExceed = _ref2$clearOnExceed === undefined ? true : _ref2$clearOnExceed; | ||
function isStorageAvailable(storage) { | ||
try { | ||
var test = 'test'; | ||
storage.setItem(test, test); | ||
storage.removeItem(test); | ||
return true; | ||
} catch (e) { | ||
return false; | ||
} | ||
} | ||
return new Storage({ type: type, schemeVersion: schemeVersion, namespace: namespace, clearOnExceed: clearOnExceed }); | ||
window.addEventListener('storage', function (_ref2) { | ||
var key = _ref2.key; | ||
var oldValue = _ref2.oldValue; | ||
var newValue = _ref2.newValue; | ||
Object.keys(subscribes).forEach(function (prefix) { | ||
if (key.indexOf(prefix) === 0) { | ||
subscribes[prefix](key.replace(prefix, ''), | ||
// TODO warn if parsing fails | ||
JSON.parse(oldValue), JSON.parse(newValue)); | ||
} | ||
}); | ||
}, false); | ||
function createStorage(_ref3) { | ||
var _ref3$type = _ref3.type; | ||
var type = _ref3$type === undefined ? 'localStorage' : _ref3$type; | ||
var _ref3$namespace = _ref3.namespace; | ||
var namespace = _ref3$namespace === undefined ? null : _ref3$namespace; | ||
var _ref3$schemeVersion = _ref3.schemeVersion; | ||
var schemeVersion = _ref3$schemeVersion === undefined ? null : _ref3$schemeVersion; | ||
var _ref3$clearOnExceed = _ref3.clearOnExceed; | ||
var clearOnExceed = _ref3$clearOnExceed === undefined ? true : _ref3$clearOnExceed; | ||
var _ref3$doNotThrow = _ref3.doNotThrow; | ||
var doNotThrow = _ref3$doNotThrow === undefined ? true : _ref3$doNotThrow; | ||
var storage = window[type]; | ||
if (storage && isStorageAvailable(storage)) { | ||
return new Storage({ storage: storage, schemeVersion: schemeVersion, namespace: namespace, clearOnExceed: clearOnExceed }); | ||
} | ||
if (doNotThrow) { | ||
console.warn('WebStorages are not available in current environment.'); | ||
return new StrageDummy(); | ||
} | ||
throw new Error('WebStorages are not available in current environment.'); | ||
} |
{ | ||
"name": "ambry", | ||
"version": "0.1.2", | ||
"version": "0.2.0", | ||
"description": "WebStorage wrapper that makes your life easier", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
7812
196