amos-tool
Version:
amos ui tool
150 lines (148 loc) • 4.92 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"), _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")), _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")), _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")), InvalidStorageDB = function() {
return (0, _createClass2.default)(function e() {
(0, _classCallCheck2.default)(this, e);
}, [ {
key: "init",
value: function() {}
}, {
key: "get",
value: function() {}
}, {
key: "set",
value: function() {}
}, {
key: "clear",
value: function() {}
} ]);
}(), RayDB = function() {
return (0, _createClass2.default)(function e() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "ray-project";
(0, _classCallCheck2.default)(this, e), (0, _defineProperty2.default)(this, "eventList", []),
this.projectName = t;
var r = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
if (void 0 === r) return console.warn("Storage: IndexedDB not available."), new InvalidStorageDB;
this.indexedDB = r, this.ready(t);
}, [ {
key: "ready",
value: function() {
var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.projectName, r = this;
return new Promise(function(n, o) {
if (e.db) n(e); else {
e.objectStoreName = "ray-store";
var i = r.indexedDB.open(t, 1);
i.onsuccess = function(t) {
e.db = t.target.result, n(e);
}, i.onupgradeneeded = function(t) {
var r = t.target.result;
r.objectStoreNames.contains(e.objectStoreName) || r.createObjectStore(e.objectStoreName);
}, i.onerror = function(e) {
o(e);
};
}
});
}
}, {
key: "init",
value: function(e, t) {
var r = this;
return new Promise(function(n, o) {
var i = function(e) {
t && "function" == typeof t && t(!1, e), n(e);
}, a = function(e) {
t && "function" == typeof t && t(e), o(e);
};
return r.ready().then(function() {
e(i, a);
}).catch(a);
});
}
}, {
key: "triggerEvent",
value: function() {
for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r];
document.dispatchEvent(new CustomEvent("rayStorage", {
detail: [].concat(t)
})), this.eventList.forEach(function(e) {
e.apply(void 0, t);
});
}
}, {
key: "addEventListener",
value: function(e) {
this.eventList.push(e);
}
}, {
key: "setItem",
value: function(e, t, r) {
var n = this;
return this.init(function(r, o) {
var i = n.db.transaction(n.objectStoreName, "readwrite").objectStore(n.objectStoreName).put(t, e);
i.onsuccess = function() {
r(t), n.triggerEvent("setItem", {
key: e,
value: t
}, n.projectName);
}, i.onerror = o;
}, r);
}
}, {
key: "getItem",
value: function(e, t) {
var r = this;
return this.init(function(t, n) {
var o = r.db.transaction(r.objectStoreName).objectStore(r.objectStoreName).get(e);
o.onsuccess = function() {
return t(o.result);
}, o.onerror = n;
}, t);
}
}, {
key: "removeItem",
value: function(e, t) {
var r = this;
return this.init(function(t, n) {
var o = r.db.transaction(r.objectStoreName, "readwrite").objectStore(r.objectStoreName).delete(e);
o.onsuccess = function() {
t(e), r.triggerEvent("removeItem", {
key: e
}, r.projectName);
}, o.onerror = n;
}, t);
}
}, {
key: "key",
value: function(e, t) {
var r = this;
return this.init(function(t, n) {
var o = r.db.transaction(r.objectStoreName).objectStore(r.objectStoreName).getAllKeys();
o.onsuccess = function() {
return t(o.result[e]);
}, o.onerror = n;
}, t);
}
}, {
key: "keys",
value: function(e) {
var t = this;
return this.init(function(e, r) {
var n = t.db.transaction(t.objectStoreName).objectStore(t.objectStoreName).getAllKeys();
n.onsuccess = function() {
return e(n.result);
}, n.onerror = r;
}, e);
}
}, {
key: "clear",
value: function(e) {
var t = this;
return this.init(function(e, r) {
var n = t.db.transaction(t.objectStoreName, "readwrite").objectStore(t.objectStoreName).clear();
n.onsuccess = function() {
e(null), t.triggerEvent("clear", {}, t.projectName);
}, n.onerror = r;
}, e);
}
} ]);
}();
module.exports = RayDB;